Springboot多数据源-事务控制

博客介绍了在Spring Boot中引入spring-boot-starter-jta-atomikos,Spring Boot会自动配置Atomikos,可修改默认配置。强调要为每个Atomikos实例配置唯一ID确保生产唯一性。设置完成后,跟以往一样在方法上加@Transactional开启事务,还给出了参考代码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考来源:

     https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-jta.html

引入spring-boot-starter-jta-atomikos,spring boot 为我们自动配置Atomikos,我们可以通过 spring.jta.xxx 修改默认配置。

pom:

<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
<!-- 支持分布式数据源 -->
 <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.10</version>
</dependency>

 需要注意:

     为确保多个事务管理器可以安全地协调相同的资源管理器,必须使用唯一ID配置每个Atomikos实例。默认情况下,此ID是运行Atomikos的计算机的IP地址。要确保生产中的唯一性,应spring.jta.transaction-manager-id 为应用程序的每个实例配置具有不同值的属性。

关键点: 

1.配置:

#spring.jta.log-dir=classpath:tx-logs
spring.jta.transaction-manager-id=tx-manager

2.使用分布式数据源链接数据

@Bean(name = "oneDataSource")
    //@ConfigurationProperties(prefix = "spring.datasource.one")
    @Primary
    public DataSource customDataSource() {
        //封装基本数据源参数对象
        DruidXADataSource datasource = new DruidXADataSource();
        datasource.setUrl(this.dbUrl);
        datasource.setUsername(username);
        datasource.setPassword(password);
        datasource.setDriverClassName(driverClassName);

        //configuration
        datasource.setInitialSize(initialSize);
        datasource.setMinIdle(minIdle);
        datasource.setMaxActive(maxActive);
        datasource.setMaxWait(maxWait);
        datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis);
        datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis);
        datasource.setValidationQuery(validationQuery);
        datasource.setTestWhileIdle(testWhileIdle);
        datasource.setTestOnBorrow(testOnBorrow);
        datasource.setTestOnReturn(testOnReturn);
        datasource.setPoolPreparedStatements(poolPreparedStatements);
        datasource.setMaxPoolPreparedStatementPerConnectionSize(maxPoolPreparedStatementPerConnectionSize);
        try {
            datasource.setFilters(filters);
        } catch (SQLException e) {
            System.err.println("druid configuration initialization filter: "+ e);
        }
        datasource.setConnectionProperties(connectionProperties);
        //创建分布式数据源对象
        AtomikosDataSourceBean sourceBean = new AtomikosDataSourceBean();
        sourceBean.setXaDataSource(datasource);
        //设置唯一的标识
        sourceBean.setUniqueResourceName("oneData");
        return sourceBean;
    }

设置完成后 跟以前的开启事务一样 在方法上加入@Transactional

代码:https://github.com/timeday/springbootdruid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值