一. spring事務分為宣告式事務和程式設計式事務 二
. 程式設計式事務可以作用在**庫,示例**:
@autowired
private org.springframework.jdbc.datasource.datasourcetransactionmanager transactionmanager;
public void test() catch (exception e)
三. 宣告式事務(註解/xml配置)最小粒度只能作用在方法上,使用該事務時需要注意如下幾點:
a. 乙個功能是否要事務,必須納入設計、編碼考慮。不能僅僅完成了基本功能就ok。
b. 如果加了事務,必須做好開發環境測試(測試環境也盡量觸發異常、測試回滾),確保事務生效。
c. 以下列了事務使用過程的注意事項,請大家留意。
1.不要在介面上宣告@transactional ,而要在具體類的方法上使用 @transactional 註解,否則註解可能無效。
2.不要圖省事,將@transactional放置在類級的宣告中,放在類宣告,會使得所有方法都有事務。故@transactional應該放在方法級別,不需要使用事務的方法,就不要放置事務,比如查詢方法。否則對效能是有影響的。
3.使用了@transactional的方法,對同乙個類裡面的方法呼叫, @transactional無效。比如有乙個類test,它的乙個方法a,a再呼叫test本類的方法b(不管b是否public還是private),但a沒有宣告註解事務,而b有。則外部呼叫a之後,b的事務是不會起作用的。(經常在這裡出錯)
4.使用了@transactional的方法,只能是public,@transactional註解的方法都是被外部其他類呼叫才有效,故只能是public。道理和上面的有關聯。故在 protected、private 或者 package-visible 的方法上使用 @transactional 註解,它也不會報錯,但事務無效。
5.經過在icore-claim中測試,效果如下:
a.丟擲受查異常***exception,事務會回滾。
b.丟擲執行時異常nullpointerexception,事務會回滾。
c.quartz中,execute直接呼叫加了@transactional方法,可以回滾;間接呼叫,不會回滾。(即上文3點提到的)
d.非同步任務中,execute直接呼叫加了@transactional方法,可以回滾;間接呼叫,不會回滾。(即上文3點提到的)
e.在action中加上@transactional,不會回滾。切記不要在action中加上事務。
f.在service中加上@transactional,如果是action直接調該方法,會回滾,如果是間接調,不會回滾。(即上文3提到的)
g.在service中的private加上@transactional,事務不會回滾。
spring事務處理
一 spring 事務處理 1 事務的處理也交給了 spring 來管理,要在 檔案中上配置事務管理類 實施事務管理的 bean class org.springframwork.orm.hibernate3.hibernatetransactionmanager 它是通過 sessionfacto...
spring事務處理
xml 實施事務管理的bean bean id transactionmanager class org.springframwork.orm.hibernate3.hibernatetransactionmanager property name sessionfactory refbean se...
spring事務處理
一 spring 事務處理 1 事務的處理也交給了spring 檔案中上配置事務管理類 實施事務管理的bean class org.springframwork.orm.hibernate3.hibernatetransactionmanager 它是通過sessionfactory 來管理,因此在...