jta-atomikos多数据源事务管理

  • pom.xml引入依赖
   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jta-atomikos</artifactId>
        </dependency>
  • application.properties配置
spring.datasource.druid.mysql2.url=jdbc:mysql://47.93.56.27:14217/sci_industrial?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&autoReconnect=true&useSSL=false
spring.datasource.druid.mysql2.user=root
spring.datasource.druid.mysql2.password=123456

spring.datasource.druid.mysql2.url=jdbc:mysql://47.93.56.28:14217/sci_industrial?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&autoReconnect=true&useSSL=false
spring.datasource.druid.mysql2.user=root
spring.datasource.druid.mysql2.password=123456
  • 编写第一个数据源的配置文件
@Data
@Configuration
@MapperScan(basePackages = "com.sci.dataInt.mapper.mysql", sqlSessionFactoryRef = "mysql")
public class MysqlDataBaseConfig {
    /**
     * mapper文件的相对路径
     */
    private static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";

    @Bean
    @ConfigurationProperties("spring.datasource.druid.mysql")
    public Properties testOneProperties() {
        return new Properties();
    }

    @Bean(name = "testOneDataSource")
    public DataSource testOneDataSource() {
        AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
        Properties prop = testOneProperties();
        ds.setXaDataSourceClassName("com.mysql.cj.jdbc.MysqlXADataSource");
        ds.setUniqueResourceName("testOne");
        ds.setXaProperties(prop);
        return ds;
    }


    /**
     * 创建Mybatis的连接会话工厂实例
     */
    @Bean(name = "mysql")
    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("testOneDataSource") DataSource dataSource,
                                                      @Autowired(required = false) Interceptor interceptor) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        // 设置数据源bean
        sessionFactory.setDataSource(dataSource);
        // 设置mapper文件路径
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));

        sessionFactory.setPlugins(interceptor);
        org.apache.ibatis.session.Configuration ibatisConfiguration = new org.apache.ibatis.session.Configuration();
        ibatisConfiguration.setMapUnderscoreToCamelCase(true);
        sessionFactory.setConfiguration(ibatisConfiguration);

        return sessionFactory.getObject();
    }

    @Bean(name = "mysqlTemplate")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("mysql") SqlSessionFactory primarySqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(primarySqlSessionFactory);
    }


}
  • 编写第二个数据源的配置文件
@MapperScan(basePackages = "com.sci.dataInt.mapper.mysql2",sqlSessionFactoryRef = "mysql2")
public class MysqlDataBaseConfig1 {
    /**
     * mapper文件的相对路径
     */
    private static final String MAPPER_LOCATION = "classpath:mapper/mysql2/*.xml";

    @Bean
    @ConfigurationProperties("spring.datasource.druid.mysql2")
    public Properties testM2Properties() {
        return new Properties();
    }

    @Bean(name = "testTwoDataSource")
    public DataSource testTwoDataSource() {
        AtomikosDataSourceBean ds = new AtomikosDataSourceBean();
        Properties prop = testM2Properties();
        ds.setXaDataSourceClassName("com.mysql.cj.jdbc.MysqlXADataSource");
        ds.setUniqueResourceName("testTwo");
        ds.setXaProperties(prop);
        return ds;
    }

    /**
     * 创建Mybatis的连接会话工厂实例
      */
    @Bean(name = "mysql2")
    public SqlSessionFactory primarySqlSessionFactory(@Qualifier("testTwoDataSource") DataSource dataSource) throws Exception {
        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        // 设置数据源bean
        sessionFactory.setDataSource(dataSource);
        // 设置mapper文件路径
        sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));

        org.apache.ibatis.session.Configuration ibatisConfiguration = new org.apache.ibatis.session.Configuration();
        ibatisConfiguration.setMapUnderscoreToCamelCase(true);
        sessionFactory.setConfiguration(ibatisConfiguration);

        return sessionFactory.getObject();
    }

    @Bean(name = "mysqlTemplate2")
    public SqlSessionTemplate testSqlSessionTemplate(@Qualifier("mysql2") SqlSessionFactory primarySqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(primarySqlSessionFactory);
    }


}
  • 排除SpringBoot的自动配置后启动项目即可
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值