Spring Boot,多数据源事务,实例

假设有两个数据源 dataSource1dataSource2,每个数据源对应一个数据库。这里使用 JdbcTemplate 来访问数据库,并通过 @Transactional 注解来管理事务。

配置多数据源

首先,在 application.propertiesapplication.yml 中配置两个数据源:

# 第一个数据源配置
spring.datasource1.url=jdbc:mysql://localhost:3306/db1
spring.datasource1.username=username1
spring.datasource1.password=password1
# 其他配置...

# 第二个数据源配置
spring.datasource2.url=jdbc:mysql://localhost:3306/db2
spring.datasource2.username=username2
spring.datasource2.password=password2
# 其他配置...

创建多数据源配置类

@Configuration
public class DataSourceConfig {

    @Bean(name = "dataSource1")
    @ConfigurationProperties(prefix = "spring.datasource1")
    public DataSource dataSource1() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "dataSource2")
    @ConfigurationProperties(prefix = "spring.datasource2")
    public DataSource dataSource2() {
        return DataSourceBuilder.create().build();
    }
}

配置事务管理器

@Configuration
public class TransactionManagerConfig {

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

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

使用多数据源和事务管理

@Service
public class MyService {

    @Autowired
    private JdbcTemplate jdbcTemplate1; // 对应dataSource1

    @Autowired
    private JdbcTemplate jdbcTemplate2; // 对应dataSource2

    @Transactional(transactionManager = "transactionManager1")
    public void transactionalOperation() {
        // 在这里使用 jdbcTemplate1 操作数据库
    }

    @Transactional(transactionManager = "transactionManager2")
    public void transactionalOperation2() {
        // 在这里使用 jdbcTemplate2 操作数据库
    }

    @Transactional
    public void transactionalOperationBoth() {
        // 这里同时操作两个数据源
        // 可以在这里分别使用 jdbcTemplate1 和 jdbcTemplate2 进行操作
    }
}

在上述示例中,使用 @Transactional(transactionManager = "transactionManager1")

*和 @Transactional(transactionManager = "transactionManager2") 标注方法,来指定不同的事务管理器,从而实现对应数据源的事务管理。

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值