04_基于JTA+Druid多数据源+Atomikos实现分布式事务
一. JTA+Druid+Atomickos的使用方式
1.1 引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
</dependency>
1.2 增加配置
在application.yml中增加如下配置,db1、db2指的是我们配置的多数据源。
db1:
datasource:
type: com.alibaba.druid.pool.xa.DruidXADataSource
db2:
datasource:
type: com.alibaba.druid.pool.xa.DruidXADataSource
jta:
log-dir: classpath:tx-logs
transaction-manager-id: txManager
1.3 druid数据源配置
- 去掉单库使用的DatasourceTransactionManager
- 使用JtaTransactionManager,参考下述代码
@Bean(name = "myJtm")
@Primary
public JtaTransactionManager activityTransactionManager() {
UserTransactionManager userTransactionManager = new UserTransactionManager();
UserTransaction userTransaction = new UserTransactionImp();
return new JtaTransactionManager(userTransaction, userTransactionManager);
}
我们可能会配置多个数据源,不过只需要在任意一个数据源中,加上对事务管理器(JtaTransactionManager)的配置就可以了。
JtaTransactionManager来自: org.springframework.transaction.jta.JtaTransactionManager
UserTransactionManager来自: com.atomikos.icatch.jta.UserTransactionManager
- 对于Datasource的创建,参考如下代码
@Primary
@Bean(name = "db1Datasource")
public DataSource activityDatasource() {
DruidXADataSource datasource = new DruidXADataSource();
datasource.setUrl(this.dbUrl);
datasource.setUsername(username);
datasource.setPassword(password);
datasource.setDriverClassName(driverClassName);
datasource.setInitialSize(initialSize