Spring Boot 项目中配置多数据源@Transactional注解失效问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring Boot 项目中配置多数据源@Transactional注解失效问题相关的知识,希望对你有一定的参考价值。

参考技术A

当一个Spring Boot 项目在配置了多个数据源 , 在编写 Service层方法 的时候 , 直接在service方法的上添加的 @Transactional 直接实现事务管理的方式是失效的 .

以最近接触到的一个持久层框架使用的是Jpa的项目为例 , 该项目通过硬编码(配置类)的方式 , 在项目中配置了两个不同的数据源 , 所以这个项目分别根据两个数据源配置了各自的事务管理器 PlatformTransactionManager , 如下 :

第一个数据源的事务管理器配置类 :

第二个数据源事务管理器配置类 :

可以看到第二个事务管理器的Bean方法上添加了 @Primary 注解 , 所以在通过 PlatformTransactionManager 类型注入事务管理器的bean时 , 默认是根据类型去注入 , 如果该类型有多个 Bean , 如不通过bean的名字去注入 , 则默认是会注入被 @Primary 标识的bean的 ;

所以在这个项目中 , 当在业务层方法添加 @Transactional 注解时 , 默认是调用了 transactionManagerTwo 这个bean , 而我在编写service层的方法时 , 调用的是第一个数据源对应的Dao层方法 , 所以直接添加 @Transactional 是不能实现事务管理的 ,

需要在使用 @Transactional 注解时指定使用的事务管理器的bean的名字 , 比如我这里调用的是第一个数据源的dao层方法 , 所以需要指定对应的事务管理器 : @Transactional(transactionManager = "transactionManagerOne") .

以上是关于Spring Boot 项目中配置多数据源@Transactional注解失效问题的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot + MyBatis + Pagehelper 配置多数据源

spring boot jpa 多数据源配置

spring boot 多数据源配置(多种数据库)

Spring Boot(十二):MyBatis-Plus的多数据源和分页

Spring boot application.properties maven 多模块项目

Spring boot配置多数据源