整合SpringBoot + MyBatis 後,須要對MyBatis的事務進行管理java
如下作個測試,先看示例代碼spring
在啓動類加事務管理註解數據庫
@EnableTransactionManagement
Service的實現類的添加方法加上相關注解 @Transactionalmybatis
@Override @Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.DEFAULT,timeout = 36000,rollbackFor = Exception.class) public String addUser(int id) { //DAO.add() try { Thread.sleep(30000); }catch (Exception e) { e.printStackTrace(); } //模擬拋異常回滾事務 if(1==1) { throw new NullPointerException(); } if (flag==1) { return "success"; } return "failed"; }
@Transactional 若是去掉這個註解,那麼程序在執行完 DAO.add() 後,數據庫就會更新了數據,就算後面拋了異常。ide
若是加上@Transactional,那麼在拋異常後就會回滾,數據庫就不會更新到。測試
好像跟Spring管理mybatis事務的autocommit的默認值有關,詳情能夠看源碼。.net
org.springframework.jdbc.datasource.DataSourceTransactionManagercode