Spring 中的編程式事務TransactionTemplate

Spring有兩種事務管理方式:編程式、聲明式。 

Spring提供兩種方式的編程式事務管理,分別是:使用TransactionTemplate和直接使用PlatformTransactionManager。 

聲明式事務:註解@Transactional

編程式事務:TransactionTempale

採用和其他Spring模板,如JdbcTempalte和HibernateTemplate一樣的方法。它使用回調方法,把應用程序從處理取得和釋放資源中解脫出來。如同其他模板,TransactionTemplate是線程安全的。

使用場景:調用支付寶/微信的支付接口,調用前先寫數據庫日誌記錄。

調用支付寶/微信的支付接口URL後,再記錄返回數據和是否成功,失敗。

 transactionTemplate.execute(new TransactionCallbackWithoutResult() {
            @Override
            protected void doInTransactionWithoutResult(TransactionStatus status) {
                try {
                    payment.setTradeNo(tradeNo);
                    payment.setStatus(0);
                    payment.setDate(new Date());
                    persist(payment);
                } catch (Exception e) {
                    status.setRollbackOnly();
                    throw e;
                }
            }
        });

使用TransactionTemplate 不需要顯式地開始事務,甚至不需要顯式地提交事務。這些步驟都由模板完成。但出現異常時,應通過TransactionStatus 的setRollbackOnly 顯式回滾事務。 
TransactionTemplate 的execute 方法接收一個TransactionCallback 實例。Callback 也是Spring 的經典設計,用於簡化用戶操作, TransactionCallback 包含如下方法。 
• Object dolnTransaction(TransactionStatus status) 。 
該方法的方法體就是事務的執行體。 
如果事務的執行體沒有返回值,則可以使用TransactionCallbackWithoutResultl類的實例。這是個抽象類,不能直接實例化,只能用於創建匿名內部類。它也是TransactionCallback 接口的子接口,該抽象類包含一個抽象方法: 
• void dolnTransactionWithoutResult(TransactionStatus status)該方法與dolnTransaction 的效果非常相似,區別在於該方法沒有返回值,即事務執行體無須返回值。 
 

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