Spring3開發實戰 之 第六章:Spring中的事務

更簡單的方式是使用@Transactional
1:在配置文件中開啓對@Transactional的支持
<tx:annotation-driven transaction-manager="txManager"/>
2:在類或者方法上配置@Transactional
3:@Transactional後面可以跟屬性配置,如下:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
默認的@Transactional配置如下:
1:事務傳播設置是 PROPAGATION_REQUIRED
2:事務隔離級別是 ISOLATION_DEFAULT
3:事務是 讀/寫
4:事務超時默認是依賴於事務系統的,或者事務超時沒有被支持。
5:任何 RuntimeException 將觸發事務回滾,但是任何 checked Exception 將不觸發事務回滾
 
Spring提供兩種方式的編程式事務管理:
1:使用 TransactionTemplate
2:直接使用一個 PlatformTransactionManager 實現
如果你選擇編程式事務管理,Spring小組推薦你採用第一種方法(即使用 TransactionTemplate)。第二種方法類似使用JTA的 UserTransaction API (除了異常處理簡單點兒)。
 
使用 TransactionTemplate:TransactionTemplate 採用與Spring中別的摸板同樣的方法,使用回調機制,將應用代碼從樣板式的資源獲取和釋放代碼中解放出來,不再有大量的try/catch/finally/try/catch代碼塊。同樣,和別的模板類一樣,TransactionTemplate 類的實例是線程安全的。
使用TransactionTemplate示例如下:
直接使用TransactionTemplate
使用 PlatformTransactionManager
你也可以直接使用PlatformTransactionManager的實現來管理事務。只需通過bean引用簡單地傳入一個 PlatformTransactionManager 實現,然後使用 TransactionDefinition 和 TransactionStatus 對象,你就可以啓動一個事務,提交或回滾。
 
使用 PlatformTransactionManager示例如下:
直接使用統一的PlatformTransactionManager

java代碼:
//獲取事務管理器
PlatformTransactionManager txManager = (PlatformTransactionManager)            
     ctx.getBean("txManager");
//定義事務屬性
DefaultTransactionDefinition td = new DefaultTransactionDefinition();
td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
//開啓事務,得到事務狀態
TransactionStatus status = txManager.getTransaction(td);
try {
    //執行數據庫操作
new JdbcTemplate(ds).execute("insert into tbl_user (uuid,name) values('"+um1.getUuid()+"','"+um1.getName()+"')");
    //提交事務
    txManager.commit(status);
}catch (Exception e) {
    //回滾事務
    txManager.rollback(status);
}
視頻配套PPT,視頻地址【 Spring3開發實戰-獨家視頻課程 】
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章