首页 > 其他分享 >SpringBoot项目配置多数据源-Transcational事务篇

SpringBoot项目配置多数据源-Transcational事务篇

时间:2024-08-04 20:26:39浏览次数:15  
标签:事务 SpringBoot 数据源 Transactional 配置 Transcational user transactionManager

结论

通过多次实践,在执行业务代码场景中,Spring事务并不能同时管理两个数据源的事务,只能管理单个数据源的事务。
如果确实有需要同时操作两个数据源,而且需要事务的场景,可以try catah起来,然后判断需不需要对数据处理(模拟回滚)。

上一篇:SpringBoot项目配置多数据源,结合mybatis-plus框架_在spring boot单体项目中配置多个数据源并使用mybatis且配置扫描不同的mapper-CSDN博客

Spring多事务管理器配置

每个spring管理器都有对应的数据源。

数据源1的事务管理器配置

@Configuration
@MapperScan(basePackages = "com.xxx.xxx.xxx01.mapper", sqlSessionFactoryRef = "db01SqlSessionFactory")
public class DataSourceConfigDB01 {

    // 上一篇的多数据源1配置
	// ...

    @Primary
    @Bean(name = "transactionManager1")
    PlatformTransactionManager transactionManager(@Qualifier("db01DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

数据源2的事务管理器配置

@Configuration
@MapperScan(basePackages = "com.xxx.xxx.xxx02.mapper", sqlSessionFactoryRef = "db02SqlSessionFactory")
public class DataSourceConfigDB01 {

    // 上一篇的多数据源2配置
	// ...

    @Bean(name = "transactionManager2")
    PlatformTransactionManager transactionManager(@Qualifier("db02DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }
}

业务代码使用事务示例

@Transactional(transactionManager = "transactionManager1")或@Transactional表示管理数据源1的事务。
为什么@Transactional能管理数据源1的事务?因为在数据源1配置中使用了@Primary注解。在没有指定的transactionManager,Spring默认取带有@Primary的事务管理器。

@Transactional(transactionManager = "transactionManager1")
public void transaction1(){
   // 业务代码
}

@Transactional(transactionManager = "transactionManager2")表示管理数据源2的事务

@Transactional(transactionManager = "transactionManager2")
public void transaction1(){
   // 业务代码
}

多数据源事务管理建议

由于Spring事务只能管理单个数据源,其他数据源非要达到回滚效果,需要自己try catch异常,在异常中,手动回滚(伪回滚,数据插入了判断存在删除)。如果在try catch中发生异常,那就很可能出问题了,建议在catch中不用做太多的事情。
建议把数据源2的操作尽量放在后面,这样可以尽量地避免异常带了的影响,比如在操作数据源2之前发生了异常,还没执行数据源2的代码,自然也不需要回滚什么的。

参考示例

@Transactional(transactionManager = "transactionManager1")
public void transaction5(){
    User user = new User();
    try {
        user.setUsername("transaction666");
        user.setPwd("transaction5");
        userDao.save(user);
        user02Dao.save(user);
        int aa = 1/0;
    } catch (Exception e) {
        // 数据源2 伪回滚
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", user.getUsername());
        User one = user02Dao.getOne(queryWrapper);
        if (Objects.nonNull(one)){
            user02Dao.removeById(one.getId());
        }
        throw e;
    }
}

上一篇:SpringBoot项目配置多数据源,结合mybatis-plus框架_在spring boot单体项目中配置多个数据源并使用mybatis且配置扫描不同的mapper-CSDN博客文章浏览阅读300次。Springboot多数据源配置MySQL_在spring boot单体项目中配置多个数据源并使用mybatis且配置扫描不同的mapperhttps://blog.csdn.net/chenhua141/article/details/140831295

标签:事务,SpringBoot,数据源,Transactional,配置,Transcational,user,transactionManager
From: https://blog.csdn.net/chenhua141/article/details/140909273

相关文章

  • SpringBoot + Vue + ElementUI 的人力资源管理系统-附项目源码与配套文档
    摘要在如今这个人才需求量大的时代,各方企业为了永葆企业的活力与生机,在不断开拓进取的同时,又广泛纳用人才,为企业的长久发展奠定了基础。于是,各个企业与部门机构,都不可避免地会接触到人力资源管理的问题。Hrm是一款人力资源管理系统,其主要功能模块有员工个人信息修改、请......
  • Springboot计算机毕业设计城市地铁线路与站点查询系统+程序+源码+数据库+调试部署+开
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,车次查询,站点信息,附近公交信息开题报告内容一、研究背景与意义随着城市化进程的加快和人口的不断增长,城市交通问题日益突出。城市轨道交通作为一种高效......
  • Springboot计算机毕业设计成都医学院学生实习管理系统的设计与实现
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表学生,实习单位,实习总结,考勤打卡,实习信息,实习评价,学生沟通,单位沟通,学生简历开题报告内容一、研究背景与意义随着社会的发展和医学教育的不断进步,实习已......
  • Springboot计算机毕业设计超市进销存管理系统7cq1l
     本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,商家,商品分类,商品信息,商品库存,商品入库,商品出库,在线留言,通知公告开题报告内容一、摘要本文旨在设计并实现一个超市进销存管理系统,该系统通过集成......
  • SpringBoot2.7.18拦截器失效不起作用
    这几天在做项目,从其他项目中复制粘贴拦截器的代码,然后修修改改,但是拦截器一直不起作用,请求来了进不去,最后发现是我写错了,代码如下:配置文件:application.ymlserver:port:8080servlet:context-path:/api/v1#springboot的配置spring:datasource:#定义数据源......
  • springboot+vue景区共享电车管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着旅游业的蓬勃发展,景区游客数量持续增长,传统交通方式已难以满足游客便捷、环保的出行需求。在此背景下,景区共享电车作为一种新兴的绿色出行方式,凭借其灵活便捷、低碳环保的特点,逐渐成为景区管理与游客出行的优选方案。然而,随着共享......
  • springboot+vue精品课程网站的设计与实现【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和教育理念的不断革新,精品课程网站作为现代教育资源的重要载体,正逐步成为推动高等教育质量提升的关键力量。当前,高校课程资源的数字化、网络化已成为不可逆转的趋势,学生与教师对于便捷、高效、互动性强的学习平......
  • springboot+vue精点味道蛋糕房管理系统【程序+论文+开题】-计算机毕业设计
    系统程序文件列表开题报告内容研究背景在快节奏的现代生活中,烘焙食品以其独特的口感与精美的外观,成为了人们日常生活中不可或缺的甜蜜伴侣。精点味道蛋糕房作为本地知名的烘焙品牌,凭借其精湛的技艺和丰富的产品线赢得了广大消费者的喜爱。然而,随着业务的不断扩展和顾客需求......
  • springboot+vue前后端分离项目-项目搭建17-集成AOP系统日志
    后端1.新增logs表和实体类,新增com/example/demo/mapper/LogsMapper.java,新增com/example/demo/controller/LogsController.javapackagecom.example.demo.controller;importcn.hutool.core.util.StrUtil;importcn.hutool.poi.excel.ExcelReader;importcn.hutool.poi......
  • SpringBoot配置文件高级用法实战
    ❃博主首页:「码到三十五」,同名公众号:「码到三十五」,wx号:「liwu0213」☠博主专栏:<mysql高手><elasticsearch高手><源码解读><java核心><面试攻关>♝博主的话:搬的每块砖,皆为峰峦之基;公众号搜索「码到三十五」关注这个爱发技术干货的coder,......