当前位置:   article > 正文

Java基础之《JdbcTemplate多数据源配置和事务管理》_多个jdbctemplate切换怎么保证事务

多个jdbctemplate切换怎么保证事务

1、DataSourceConfig.java

  1. package cn.xxx.coupon.pay.config;
  2. import javax.sql.DataSource;
  3. import org.springframework.boot.context.properties.ConfigurationProperties;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.context.annotation.Primary;
  7. import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
  8. @Configuration
  9. public class DataSourceConfig {
  10. @Primary
  11. @ConfigurationProperties(prefix = "spring.datasource.druid.one")
  12. @Bean(name = "dsOne")
  13. public DataSource dsOne() {
  14. return DruidDataSourceBuilder.create().build();
  15. }
  16. @ConfigurationProperties(prefix = "spring.datasource.druid.two")
  17. @Bean(name = "dsTwo")
  18. public DataSource dsTwo() {
  19. return DruidDataSourceBuilder.create().build();
  20. }
  21. }

2、JdbcTemplateConfig.java

  1. package cn.xxx.coupon.pay.config;
  2. import javax.sql.DataSource;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.jdbc.core.JdbcTemplate;
  7. @Configuration
  8. public class JdbcTemplateConfig {
  9. @Bean
  10. public JdbcTemplate jdbcTemplateOne(@Qualifier("dsOne") DataSource dataSource) {
  11. return new JdbcTemplate(dataSource);
  12. }
  13. @Bean
  14. public JdbcTemplate jdbcTemplateTwo(@Qualifier("dsTwo") DataSource dataSource) {
  15. return new JdbcTemplate(dataSource);
  16. }
  17. }

3、yml文件配置

  1. #定义两个数据源
  2. spring:
  3. datasource:
  4. druid:
  5. one:
  6. driverClassName: com.mysql.cj.jdbc.Driver
  7. type: com.alibaba.druid.pool.DruidDataSource
  8. url: jdbc:mysql://localhost:3306/db1?serverTimezone=UTC
  9. username: db1
  10. password: db1
  11. two:
  12. driverClassName: com.mysql.cj.jdbc.Driver
  13. type: com.alibaba.druid.pool.DruidDataSource
  14. url: jdbc:mysql://localhost:3306/db2?serverTimezone=UTC
  15. username: db2
  16. password: db2

4、pom.xml文件配置

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-jdbc</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-web</artifactId>
  8. </dependency>
  9. <dependency>
  10. <groupId>mysql</groupId>
  11. <artifactId>mysql-connector-java</artifactId>
  12. </dependency>
  13. <dependency>
  14. <groupId>com.alibaba</groupId>
  15. <artifactId>druid-spring-boot-starter</artifactId>
  16. </dependency>

5、注意事项
Spring Boot 2.X 版本不再支持配置继承,多数据源的话每个数据源的所有配置都需要单独配置,否则配置不会生效
https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter

6、事务管理
JdbcTemplate单数据源可以用@Transactional管理事务
多数据源@Transactional只对标识@Primary的数据源有效

7、事务管理器默认会绑定
当引入jdbc依赖之后,SpringBoot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。spring-boot-starter-jdbc会触发DataSourceTransactionManagerAutoConfiguration这个自动化配置类,构造事务管理器

8、添加事务管理器TransactionManagerConfig.java

  1. package cn.okcard.coupon.pay.config;
  2. import javax.sql.DataSource;
  3. import org.springframework.beans.factory.annotation.Qualifier;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. import org.springframework.jdbc.datasource.DataSourceTransactionManager;
  7. @Configuration
  8. public class TransactionManagerConfig {
  9. @Bean
  10. public DataSourceTransactionManager transactionManagerTwo(@Qualifier("dsTwo") DataSource dataSource) {
  11. return new DataSourceTransactionManager(dataSource);
  12. }
  13. }

调用方式:

@Transactional(value="transactionManagerTwo")


参考资料:https://blog.csdn.net/liu19900205/article/details/84972595

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52365
推荐阅读
相关标签
  

闽ICP备14008679号