回覆列表
  • 1 # 使用者8542928681829

    那麼當我們呼叫Service層的一個方法的時候它能夠保證我們的這個方法中執行的所有的對資料庫的更新操作保持在一個事務中,在事務層裡面呼叫的這些方法要麼全部成功,要麼全部失敗。

    那麼事務的傳播特性也是從這裡說起的。如果你在你的Service層的這個方法中,除了呼叫了Dao層的方法之外,還呼叫了本類的其他的Service方法,那麼在呼叫其他的Service方 是解決這個問題的,“事務是會傳播的”在Spring中有針對傳播特性的多種配置我們大多數情況下只用其中的一 種:PROPGATION_REQUIRED:這個配置項的意思是說當我呼叫service層的方法的時候開啟一個事務(具體呼叫那一層的方法開始建立事 務,要看你的aop的配置),那麼在呼叫這個service層裡面的其他的方法的時候,如果當前方法產生了事務就用當前方法產生的事務,否則就建立一個新 的事務。這個工作使由Spring來幫助我們完成的。以前沒有Spring幫助我們完成事務的時候我們必須自己手動的控制事務,例如當我們專案中僅僅使用hibernate,而沒有整合進spring的時候,我們在一個service層中呼叫其他的業務邏輯方法,為了保證事物必須也要把當前的hibernate session傳遞到下一個方法中,或者採用ThreadLocal的方法,將session傳遞給下一個方法,其實都是一個目的。現在這個工作由spring來幫助我們完成,就可以讓我們更加的專注於我們的業務邏輯。而不用去關心事務的問題。預設情況下當發生RuntimeException的情況下,事務才會回滾,所以要注意一下 如果你在程式發生錯誤的情況下,有自己的異常處理機制定義自己的Exception,必須從RuntimeException類繼承 這樣事務才會回滾!

  • 中秋節和大豐收的關聯?
  • 周筆暢的筆記是誰寫的詞?