atomikosdatasourcebean mysql_Spring Boot 2.x基础教程:使用JTA实现多数据源的事务管理...

本文介绍了如何在Spring Boot 2.x项目中,利用JTA(Java Transaction API)和Atomikos来管理多数据源的事务。通过配置Atomikos数据源,并在服务中使用@Transactional注解,确保在两个不同数据库的数据更新操作中,要么全部成功,要么全部回滚,以保持数据一致性。
摘要由CSDN通过智能技术生成

在一个Spring Boot项目中,连接多个数据源还是比较常见的。之前也介绍了如何在几种常用框架的场景下配置多数据源,具体可见:

当我们采用多数据源的时候,同时也会出现一个这样的特殊场景:我们希望对A数据源的更新和B数据源的更新具备事务性。这样的例子很常见,比如:在订单库中创建一条订单记录,同时还需要在商品库中扣减商品库存。如果库存扣减失败,那么我们希望订单创建也能够回滚。

如果这两条数据在一个数据库中,那么通过之前介绍的事务管理就能轻松解决了。但是,当这两个操作位于不同的数据库中,那么就无法实现了。

本文就来介绍一种解决这类问题的方法:JTA事务。

什么是JTA

JTA,全称:Java Transaction API。JTA事务比JDBC事务更强大。一个JTA事务可以有多个参与者,而一个JDBC事务则被限定在一个单一的数据库连接。所以,当我们在同时操作多个数据库的时候,使用JTA事务就可以弥补JDBC事务的不足。

在Spring Boot 2.x中,整合了这两个JTA的实现:

Atomikos:可以通过引入spring-boot-starter-jta-atomikos依赖来使用

Bitronix:可以通过引入spring-boot-starter-jta-bitronix依赖来使用

由于Bitronix自Spring Boot 2.3.0开始不推荐使用,所以在下面的动手环节中,我们将使用Atomikos作为例子来介绍JTA的使用。

动手试试

下面我们就来实操一下,如何在Spring Boot中使用JTA来实现多数据源下的事务管理。

准备工作

这里我们将使用最基础的JdbcTemplate来实现数据访问,所以如果你还不会使用JdbcTemplate配置多数据源,建议先看一下JdbcTemplate的多数据源配置。

场景设定:

假设我们有两个库,分别为:test1和test2

这两个库中都有一张User表,我们希望这两张表中的数据是一致的

假设这两张表中都已经有一条数据:name=aaa,age=30;因为这两张表中数据是一致的,所以要update的时候,就必须两个库中的User表更新时候,要么都成功,要么都失败。

112fe6d2084a

操作详细

在pom.xml中加入JTA的实现Atomikos的Starter

org.springframework.boot

spring-boot-starter-jta-atomikos

在application.properties配置文件中配置两个test1和test2数据源

spring.jta.enabled=true

spring.jta.atomikos.datasource.primary.xa-properties.url=jdbc:mysql://localhost:3306/test1

spring.jta.atomikos.datasource.primary.xa-properties.user=root

spring.jta.atomikos.datasource.primary.xa-properties.password=12345678

spring.jta.atomikos.datasource.primary.xa-data-source-class-name=com.mysql.cj.jdbc.MysqlXADataSource

spring.jta.atomikos.datasource.primary.unique-resource-name=test1

spring.jta.atomikos.datasource.primary.max-pool-size=25

spring.jta.atomikos.datasource.primary.min-pool-size=3

spring.jta.atomikos.datasource.primary.max-lifetime=20000

spring.jta.atomikos.datasource.primary.borrow-connection-timeout=10000

spring.jta.atomikos.datasource.secondary.xa-properties.url=jdbc:mysql://localhost:3306/test2

spring.jta.atomikos.datasource.secondary.xa-properties.user=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值