1. 程式人生 > 程式設計 >springboot手動事務回滾的實現程式碼

springboot手動事務回滾的實現程式碼

親測在使用@Transactional、@Transactional(rollbackFor = Exception.class)及catch異常之後 throw new RuntimeException();仍然不能解決執行緒中的事務回滾。下面使用執行緒所機制,進行整體的事務提交及事務回滾,程式碼如下:

在springboot啟動類上加 @EnableTransactionManagement 註解

執行緒類中新增以下程式碼

@Autowired
  private PlatformTransactionManager platformTransactionManager;
  @Autowired
  private TransactionDefinition transactionDefinition;
  private Lock lock = new ReentrantLock();
  // todo 業務處理方法 資料儲存異常 手動進行回滾
  public void saveMsg(String message) throws Exception {
    lock.lock();
    TransactionStatus transaction = platformTransactionManager.getTransaction(transactionDefinition);
    try {
    	//todo 具體業務,對資料庫的操作 start
    	test1Service.save(test1);
    	test2Service.save(test2);
    	//end
    	
      platformTransactionManager.commit(transaction);
    } catch (Exception e) {
      platformTransactionManager.rollback(transaction);
      e.printStackTrace();
    } finally {
      lock.unlock();
    }
  }

注:如果無法用 @Autowired 程式啟動進行物件建立,可以使用init靜態注入,如果物件可以正常建立,下面程式碼可以忽略。

@Autowired
  private static PlatformTransactionManager platformTransactionManager;
  @Autowired
  private static TransactionDefinition transactionDefinition;

  @Autowired
  public void init(PlatformTransactionManager platformTransactionManager,TransactionDefinition transactionDefinition
  ) {
    DriverAlfaServerHandler.platformTransactionManager = platformTransactionManager;
    DriverAlfaServerHandler.transactionDefinition = transactionDefinition;
  }

此回滾方法親測有效。

到此這篇關於springboot手動事務回滾的實現程式碼的文章就介紹到這了,更多相關springboot 事務回滾內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!