以下配置均忽略datasource,transactionmanager,sessionfactory之類的配置,因為無論何種方式,前兩者都不能少
1、 比較原始和煩瑣的配置方法(每個service都來這麼一下,不累死?):
propagation_required_new,-exception
propagation_required,readonly
2、下面有一點小改進,但還是有一些煩
class="org.springframework.transaction.interceptor.transactionproxyfactorybean">
ref bean="transactionmanager"/>
propagation_required, readonly
propagation_required
以後,如果增加新的service/manager,則xml配置的增量是這一段:
上面說的是老的做法,比較傳統。缺點是增量比較大,配置起來copy&paste讓人覺得不太爽,比較臃腫。
3、用 defaultadvisorautoproxycreator 實現自動**,實現了對容器中所有 bean 的自動**, 增加乙個需要事務的業務 bean 時只要在 transactioninterceptor 增加一行即可, 增加別的 interceptor 也非常方便,極大減少了配置量
class="org.springframework.orm.hibernate3.hibernatetransactionmanager">
com.skyon.user.manager.usermanager.*=propagation_required
#add new defines here ->
transactioninterceptor
4、改用beannameautoproxycreator,畢竟不是context下的每個bean都需要事務
?propagation_required
propagation_required,readonly
*service,*manager
transactioninterceptor
? 以後每次的增量是這一段:
5、beannameautoproxycreator的另一種配法
class="org.springframework.transaction.interceptor.matchalwaystransactionattributesource">
propagation_required
class="org.springframework.transaction.interceptor.transactioninterceptor">
class="org.springframework.aop.framework.autoproxy.beannameautoproxycreator">
其它一些注意:
1、如果你想使用配置事務,但又不想使用spring的模板方法,要注意,獲取connection時不能直接從datasource獲得:
connection conn = datasourceutils.getconnection(datasource);
2、 預設情況下spring只有在runtimeexception時才回滾事務,要使其它異常也回滾,需要在配置中作一些改變,見第一種配置中的相關資訊。
Spring管理事務
spring管理事務 platfromtransactionmanager 平台管理事務 幫助我們管理任意平台的事務 jdbc datasourcetransactionmanager hibernate hibernatetransactionmanager transactionmanager ...
spring 管理事務
spring 管理事務 管理切面類 事務的回滾,提交 spring提供的 事務管理器 之前,之後,拋異常時 spring提供的 事務 切入點 目標類中的方法 我們自己篩選 帶著切面類中的 動態織入到切入點上 事務 帶著事務管理器中的 動態織入到切入點上 spring與jdbc結合事務的管理 1.通過...
spring如何管理事務
spring提供的事務管理可以分為兩類 程式設計式的和宣告式的。程式設計式的,比較靈活,但是 量大,存在重複的 比較多 宣告式的比程式設計式的更靈活方便。1 傳統使用 jdbc 的事務管理 以往使用jdbc 進行資料操作,使用 datasource 從資料來源中得到 connection 我們知道資...