当前位置: 首页 > article >正文

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

http://www.kler.cn/news/163038.html

相关文章:

  • sql行转列
  • java-两个列表进行比较,判断那些是需要新增的、删除的、和更新的
  • 线性回归与逻辑回归:深入解析机器学习的基石模型
  • LinuxBasicsForHackers笔记 -- 日志系统
  • AGM CPLD 应用指南
  • 《每天一个Linux命令》 -- (5)通过sshkey密钥登录服务器
  • Could not resolve all dependencies for configuration ‘:app:androidApis‘.
  • Amazon CodeWhisperer 开箱初体验
  • JAVA程序如何打jar和war问题解决
  • CentOS系统装机流程
  • 【场景测试用例】上传文件
  • 【数据开发】Hive 多表join中的条件过滤与指定分区
  • ReactNative性能优化实践
  • Azure云WAF服务的CRS规则和DRS规则区别
  • 大数据技术3:数据仓库的ETL和分层模型
  • vite配置nework访问ip
  • 电脑知识:关于电脑使用的误区
  • Linux查看openSSL版本
  • 24、文件上传漏洞——Apache文件解析漏洞
  • 【Python】 Python web开发库大全
  • 云贝教育 |【技术文章】PostgreSQL中误删除数据怎么办(一)
  • java:slf4j、log4j、log4j2、logback日志框架的区别与示例
  • 实例分割网络:Mask RCNN
  • IBM Qiskit量子机器学习速成(四)
  • pytorch中五种常用随机矩阵构造方法:rand、randn、randn_like、randint、randperm
  • CSS import 规则
  • 医院信息系统源码,采用JAVA编程,支持跨平台部署应用,满足一级综合医院(专科二级及以下医院500床)的日常业务应用
  • 从互联网到云计算再到 AI 原生,百度智能云数据库的演进
  • LAMP安装部署网站
  • 【MATLAB】tvfEMD信号分解+FFT+HHT组合算法