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

2023-12-13 17:44:54

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;
        }
    }
}

文章来源:https://blog.csdn.net/qq_27577113/article/details/134870524
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。