SpringBoot+MyBatis事務管理

整合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

相關文章
相關標籤/搜索