天天看點

spring的聲明式事務

關于事務配置的詳解:spring事務配置的五種方式

<a href="http://www.blogjava.net/robbie/archive/2009/04/05/264003.html" target="_blank">http://www.blogjava.net/robbie/archive/2009/04/05/264003.html</a>

事務的傳播特性

在我們用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類繼承這樣事務才會復原

配置@transactional(rollbackfor=exception.class)

即使是抛出的是非運作時異常也會復原

spring的聲明式事務

參考文章:

<a href="http://blog.sina.com.cn/s/blog_6b338038010109tm.html" target="_blank">http://blog.sina.com.cn/s/blog_6b338038010109tm.html</a>

使用spring聲明式事務的幾個步驟:

       1. applicationcontext.xml中進行配置