mybatisplus手动获取数据源执行非主数据库事务

mybatisplus手动获取数据源执行非主数据库事务

class A {
    
    
    // 事务管理器
    @Resource
    private DataSourceTransactionManager dataSourceTransactionManager;

    @Autowired
    private DataSource dataSource; // 最终是com.baomidou.dynamic.datasource.DynamicRoutingDataSource类型

    public void add(MDTO dto) throws AppException {
    
    
        // 获取想要执行事务的数据源
        final DataSource testdb = ((DynamicRoutingDataSource) dataSource).getDataSource("testdb");
        dataSourceTransactionManager.setDataSource(testdb);

        DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
        // 新发起一个事务
        transactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);

        // 获得事务状态
        final TransactionStatus transactionStatus = dataSourceTransactionManager.getTransaction(transactionDefinition);


        try {
    
    
            Map<String, Object> result = new HashMap<>();
            result.put("test1", 0);
            result.put("test2", 0);

            baseMapper.WAdd(result);

            // 提交所有事务
            dataSourceTransactionManager.commit(transactionStatus);
        } catch (Exception e) {
    
    
            // 回滚
            if (dataSourceTransactionManager != null) {
    
    
                dataSourceTransactionManager.rollback(transactionStatus);
            }
            e.printStackTrace();
            throw e;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_27577113/article/details/134870524