1. 程式人生 > >事務的傳播行為(轉載筆記)

事務的傳播行為(轉載筆記)

事物 dao rop mil HR back style AR 使用

我們都知道事務的概念,那麽事務的傳播特性是什麽呢?(此處著重介紹傳播特性的概念,關於傳播特性的相關配置就不介紹了,可以查看spring的官方文檔)
在我們用SSH開發項目的時候,我們一般都是將事務設置在Service層 那麽當我們調用Service層的一個方法的時候它能夠保證我們的這個方法中執行的所有的對數據庫的更新操作保持在一個事務中,在事務層裏面調用的這些方法要麽全部成功,要麽全部失敗。那麽事務的傳播特性也是從這裏說起的。
如果你在你的Service層的這個方法中,除了調用了Dao層的方法之外,還調用了本類的其他的Service方法,那麽在調用其他的Service方法的時候,這個事務是怎麽規定的呢,我必須保證我在我方法裏掉用的這個方法與我本身的方法處在同一個事務中,否則如果保證事物的一致性。事務的傳播特性就是解決這個問題的,“事務是會傳播的”在Spring中有針對傳播特性的多種配置我們大多數情況下只用其中的一種:PROPGATION_REQUIRED:這個配置項的意思是說當我調用service層的方法的時候開啟一個事務(具體調用那一層的方法開始創建事務,要看你的aop的配置),那麽在調用這個service層裏面的其他的方法的時候,如果當前方法產生了事務就用當前方法產生的事務,否則就創建一個新的事務。這個工作使由Spring來幫助我們完成的。


以前沒有Spring幫助我們完成事務的時候我們必須自己手動的控制事務,例如當我們項目中僅僅使用hibernate,而沒有集成進spring的時候,我們在一個service層中調用其他的業務邏輯方法,為了保證事物必須也要把當前的hibernate session傳遞到下一個方法中,或者采用ThreadLocal的方法,將session傳遞給下一個方法,其實都是一個目的。現在這個工作由spring來幫助我們完成,就可以讓我們更加的專註於我們的業務邏輯。而不用去關心事務的問題。

默認情況下當發生RuntimeException的情況下,事務才會回滾,所以要註意一下 如果你在程序發生錯誤的情況下,有自己的異常處理機制定義自己的Exception,必須從RuntimeException類繼承 這樣事務才會回滾!

事務的傳播行為(轉載筆記)