Spring-使用事務面板

正常開發,我們一般會使用基於事務的註解來實現事務的機制,但是有的時候或者某種場景,完全通過註解是達不到效果的,比如 我們想完成以下的場景:

1 根據條件,手動回滾或者提交事務

2 獲取事務是否已經徹底完成的狀態

3 設置事務具體的回滾point等,一句話想更好靈活的去控制事務的使用,這個時候推薦自定義事務的實現,一般通過如下兩種方式

3.1 基於TransactionTemplate

使用TransactionTemplate 不需要顯式地開始事務,甚至不需要顯式地提交事務。這些步驟都由模板完成。但出現異常時,應通過TransactionStatus 的setRollbackOnly 顯式回滾事務。 
TransactionTemplate 的execute 方法接收一個TransactionCallback 實例。Callback 也是Spring 的經典設計,用於簡化用戶操作, TransactionCallback 包含如下方法。 
• Object dolnTransaction(TransactionStatus status) 。 

一般使用如下所示的代碼結構
transactionTemplate.execute(new TransactionCallback() { 
public Object doInTransaction(TransactionStatus status) { 
try{	
    } 
catch (Exception e) { 
} 
  finally { 

status.setRollbackOnly(); 
           ) 
); 
這個方法是可以由返回只

如果有異常的話,一定要使用status.setRollbackOnly進行回滾

3.2 基於PlatformTransactionManager

使用PlatformTransactionManager直接管理事務。簡單地通過一個bean引用給你的bean傳遞一個你使用的 PlatformTransaction對象。然後,使用TransactionDefinition和TransactionStatus對象就可以發起、回滾、提交事務。它會涉及到其它兩個對象TransactionDefinition和TransactionStatus,一般使用如下片段

        //定義一個事務
        DefaultTransactionDefinition def= new DefaultTransactionDefinition();     
        //設置事務的傳播級別
        def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);       
        //獲取事務的狀態
        TransactionStatus status = transactionManager.getTransaction(def);
        //提交事務;
        transactionManager.commit(status);
        //回滾事務
        transactionManager.rollback(status);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章