spring的事務的傳播方式

事務傳播行爲:是指添加事物時的策略  
1 PROPAGATION_REQUIRED
  若是當前沒有事務,就新建一個事務,若是已經存在一個事務中,加入到這個事務中。這是最多見的選擇。
2  PROPAGATION_SUPPORTS
  支持當前事務,若是當前沒有事務,就以非事務方式執行。
3  PROPAGATION_MANDATORY
  使當前的事務,若是當前沒有事務,就拋出異常。
4  PROPAGATION_REQUIRES_NEW
  新建事務,若是當前存在事務,把當前事務掛起。
5  PROPAGATION_NOT_SUPPORTED
  以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。
6  PROPAGATION_NEVER
  以非事務方式執行,若是當前存在事務,則拋出異常。
7  PROPAGATION_NESTED
  若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行與PROPAGATION_REQUIRED相似的操做。

 spring

Spring事務傳播方式
主要控制當前的事務如何傳播到另外的事務中

PROPAGATION_NESTED 
若是當前存在事務,則在嵌套事務內執行。
若是當前沒有事務,則進行與PROPAGATION_REQUIRED相似的操做。
嵌套事務一個很是重要的概念就是內層事務依賴於外層事務。
外層事務失敗時,會回滾內層事務所作的動做。而內層事務操做失敗並不會引發外層事務的回滾

PROPAGATION_NEVER 
以非事務方式執行,若是當前存在事務,則拋出異常。

PROPAGATION_NOT_SUPPORTED 
以非事務方式執行操做,若是當前存在事務,就把當前事務掛起

PROPAGATION_REQUIRED 
支持當前事務,若是當前沒有事務,就新建一個事務。這是最多見的選擇(默認)

PROPAGATION_REQUIREDS_NEW 
新建事務,若是當前存在事務,把當前事務掛起。

PROPAGATION_SUPPORTS 
支持當前事務,若是當前沒有事務,就以非事務方式執行。

PROPAGATION_MANDATORY 
支持當前事務,若是當前沒有事務,就拋出異常。



Spring事務隔離級別
主要定義事務與事務之間在數據庫讀寫方面的控制範圍
主要解決髒讀、不可重複讀、虛讀三個問題

ISOLATION_DEFAULT 默認級別

ISOLATION_READ_UNCOMMITED 
事務最低的隔離級別,充許別外一個事務能夠看到這個事務未提交的數據,
會產生髒讀,不可重複讀和幻像讀

ISOLATION_COMMITED 
保證一個事務修改的數據提交後才能被另一個事務讀取,能夠避免髒讀出現,
可是可能會出現不可重複讀和幻像讀

ISOLATION_REPEATABLE_READ 
保證一個事務不能讀取另外一個事務未提交的數據外能夠防止髒讀,不可重複讀
可是可能出現幻像讀

ISOLATION_SERIALIZABLE 
花費最高代價可是最可靠的事務隔離級別。
事務被處理爲順序執行。除了防止髒讀,不可重複讀外,還避免了幻像讀

Spring中的事務管理方式:
編程式和聲明式(常

注意事項:   
1. 事務邊界設置在service層
2. 須要使SessionFactory.getCurrentSession
(hibernate3.6)不須要配置Session上下文hibernate.current_session_context_class
3. Spring默認經過捕獲運行時異常實現事務回滾,
非運行期異常不會觸發rollback
能夠經過配置rollback-for 指定異常類
事務中不要catch異常,不然spring放棄事務管理s數據庫

相關文章
相關標籤/搜索