前言:
Spring的事務回滾采用@Transactional,當方法中拋出異常時,會觸發事務回滾。
如果沒有異常,根據業務邏輯,想要主動觸發事務回滾,要怎么實現呢?例如,調用一個第三方接口,如果返回值不是200,就要觸發事務回滾。這期間並沒有代碼錯誤而拋出異常,只是根據接口的返回值來判斷是否回滾。
方法一:
throw new RuntimeException();
方法二:
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
實測:數據庫中沒有新增數據
@Test @Transactional public void contextLoads3() throws Exception{ //創建對象 Game g1 = new Game(); g1.setName("test"); g1.setPicUrl("111"); g1.setType(1); //新增到數據庫 gameRepository.save(g1); if(true){ //throw new RuntimeException();//主動拋出異常 //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();//調用事務回滾的方法 } }
