spring事務怎麼配置
『壹』 spring如何管理事務
Spring提供了多種方式來管理事務,包括使用註解、XML配置和編程方式。
使用註解方式:
1. 在配置文件中啟用事務管理器:可以通過配置文件(如applicationContext.xml)中的標簽來啟用事務管理器。
2. 註解事務:在需要添加事務的方法上添加@Transaction註解,可以設置事務的屬性,如傳播行為、隔離級別等。
使用XML配置方式:
1. 配置事務管理器:在配置文件中定義事務管理器,指定數據源和其他相關屬性。
2. 配置事務通知:通過標簽配置切入點和通知,指定要應用事務的方法。
3. 配置事務屬性:通過標簽配置事務的屬性,包括傳播行為、隔離級別等。
使用編程方式:
1. 獲取事務管理器:使用@Autowired或@Resource註解注入事務管理器。
2. 編程式事務管理:在需要添加事務的方法中,使用TransactionTemplate來執行資料庫操作,並設置事務的屬性,如傳播行為、隔離級別等。
無論使用何種方式,Spring事務管理器會在方法執行前開啟一個事務,方法執行完成後根據返回值來決定是提交事務還是回滾事務。如果方法中拋出了異常,則事務會自動回滾,否則事務將會提交。
『貳』 如何在spring中配置跨資料庫的事務
1.使用註解的方式
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">
<!-- 使用annotation定義資料庫事務,這樣可以在類或方法中直接使用@Transactional註解來聲明事務 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
2.使用事務管理器來管理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<aop:config>
<!-- 切入點指明了在執行com.zxt.service包中的所有方法時產生事務攔截操作 -->
<aop:pointcut id="Methods"
expression="execution(* com.zxt.service.*.*(..))" />
<!-- 定義了將採用何種攔截操作,這里引用到 txAdvice -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="Methods" />
</aop:config>
<!-- 事務通知操作,使用的事務管理器引用自transactionManager -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<!-- 指定哪些方法需要加入事務 -->
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<!-- read-only="true":其餘方法只讀格式,加強其安全性 -->
<tx:method name="*" read-only="true" propagation="NOT_SUPPORTED" />
</tx:attributes>
</tx:advice>
</beans>
『叄』 spring的事務機制,以及是如何管理的
事務管理可以幫助我們保證數據的一致性,對應企業的實際應用很重要。
Spring的事務機制包括聲明式事務和編程式事務。
編程式事務管理:Spring推薦使用TransactionTemplate,實際開發中使用聲明式事務較多。
聲明式事務管理:將我們從復雜的事務處理中解脫出來,獲取連接,關閉連接、事務提交、回滾、異常處理等這些操作都不用我們處理了,Spring都會幫我們處理。
聲明式事務管理使用了AOP面向切面編程實現的,本質就是在目標方法執行前後進行攔截。在目標方法執行前加入或創建一個事務,在執行方法執行後,根據實際情況選擇提交或是回滾事務。
如何管理的:
Spring事務管理主要包括3個介面,Spring的事務主要是由他們三個共同完成的。
1)PlatformTransactionManager:事務管理器--主要用於平台相關事務的管理
主要有三個方法:commit 事務提交;
rollback 事務回滾;
getTransaction 獲取事務狀態。
2)TransactionDefinition:事務定義信息--用來定義事務相關的屬性,給事務管理器PlatformTransactionManager使用
這個介面有下面四個主要方法:
getIsolationLevel:獲取隔離級別;
getPropagationBehavior:獲取傳播行為;
getTimeout:獲取超時時間;
isReadOnly:是否只讀(保存、更新、刪除時屬性變為false--可讀寫,查詢時為true--只讀)
事務管理器能夠根據這個返回值進行優化,這些事務的配置信息,都可以通過配置文件進行配置。
3)TransactionStatus:事務具體運行狀態--事務管理過程中,每個時間點事務的狀態信息。
例如它的幾個方法:
hasSavepoint():返回這個事務內部是否包含一個保存點,
isCompleted():返回該事務是否已完成,也就是說,是否已經提交或回滾
isNewTransaction():判斷當前事務是否是一個新事務
聲明式事務的優缺點:
優點
不需要在業務邏輯代碼中編寫事務相關代碼,只需要在配置文件配置或使用註解(@Transaction),這種方式沒有侵入性。
缺點
聲明式事務的最細粒度作用於方法上,如果像代碼塊也有事務需求,只能變通下,將代碼塊變為方法。