Spring聲明式事務配置詳解

Spring聲明式事務功能應該是大家應用 Spring中使用的最多的功能之一了,的確該功能極大的簡化了大家對數據庫操作的。目前 Spring支持的聲明式事務有兩個配置方式,一種是 XML配置方式,另一種是註解方式


針對配置這塊, XML配置同學們會覺得比較麻煩,特別是針對事務屬性的配置,所以補充一下本塊配置說明,特分享給大家,希望對大家有幫助。

下面是 Spring XML配置事務比較常用的方式,也是我們這邊事務 XML配置事務的使用方式,本文以該種配置爲例,進行說明。

     < bean  id ="transactionInterceptor"
        class
="org.springframework.transaction.interceptor.TransactionInterceptor" >
        
< property  name ="transactionManager"  ref ="transactionManager"   />
        
< property  name ="transactionAttributes" >
            
< props >
                
< prop  key ="query*" > PROPAGATION_REQUIRED,readOnly </ prop >
                
< prop  key ="is*" > PROPAGATION_REQUIRED,readOnly </ prop >
                
< prop  key ="find*" > PROPAGATION_REQUIRED,readOnly </ prop >
                
< prop  key ="get*" > PROPAGATION_SUPPORTS,readOnly </ prop >
                
< prop  key ="load*" > PROPAGATION_REQUIRED,readOnly </ prop >
                
< prop  key ="*" > PROPAGATION_REQUIRED </ prop >
            
</ props >
        
</ property >
    
</ bean >

 

配置詳解說明如下:

 TransactionInterceptor 是聲明式事務攔截器。可以由 Spring AOP攔截器進行回調。

 transactionAttributes 是事務屬性的配置說明,也是大家覺得比較不好配置,不太容易記憶的地方

它的配置規則如下:因爲都有前綴標識,所以順序可以修改。

(PROPAGATION_NAME,ISOLATION_NAME,readOnly,timeout_NNNN,+Exception1, - Exception2)

  PROPAGATION_REQUIRED 事務的傳播級別 ( PROPAGATION_ 開頭 ). 可設置值說明如下:

PROPAGATION_REQUIRED 使用當前事務,如果當前沒有事務,則開啓新事務

PROPAGATION_SUPPORTS 當前有事務則用,沒有事務則不用

PROPAGATION_MANDATORY 當前有事務就用,沒有事務則報錯 (必須要用事務 )

PROPAGATION_REQUIRES_NEW 當前有事務則掛起原事務,新啓事務 (必開新事務 )

PROPAGATION_NOT_SUPPORTED 不使用事務,如果當前有事務,則掛起事務

PROPAGATION_NEVER 不能有事務,如果當前有事務,則報錯 (必須沒有事務 )

PROPAGATION_NESTED PROPAGATION_REQUIRED

 

 ISOLATION_DEFAULT 事務隔離級別 ( ISOLATION_ 開頭 )

ISOLATION_DEFAULT  使用數據庫默認事務

ISOLATION_READ_UNCOMMITTED

ISOLATION_READ_COMMITTED

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

 readOnly

如果設置,則表示只讀事務,如果不設置,則表示讀來事務

TIMEOUT_DEFAULT 事務超時設置 (timeout_ 開頭 )

單位是秒。 例如 timeout_ 20 則表示事務超時時間是 20秒。

 +Exception 表示遇到該異常時,執行回滾

 –Exception 表示遇到該異常時,不執行加滾

transactionManager 是事務管理器,針對不同的持久層,事務都會提供不同的實現。其接口都是 org.springframework.transaction.PlatformTransactionManager

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章