更簡單的方式是使用@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開發實戰-獨家視頻課程 】