Spring-boot + atomikos + druid分布式事务配置
1.额外依赖项
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jta</artifactId>
<version>4.0.4</version>
</dependency>
<dependency>
<groupId>com.atomikos</groupId>
<artifactId>transactions-jdbc</artifactId>
<version>4.0.4</version>
</dependency>
2.数据源配置(yml配置,有几个数据源配置几个数据源,这里使用阿里Druid数据库连接池)
datasource:
# 资源标识
uniqueResourceName: datasource1
# 数据源类名
xaDataSourceClassName: com.alibaba.druid.pool.xa.DruidXADataSource
# 数据源配置
xaProperties:
driverClassName: com.mysql.jdbc.Driver
url: @spring.datasource.url@
username: @spring.datasource.username@
password: @spring.datasource.password@
initialSize: 3
minIdle: 3
maxActive: 20
maxWait: 60000
timeBetweenEvictionRunsMillis: 60000
minEvictableIdleTimeMillis: 300000
validationQuery: SELECT 1
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
filters: stat
3.数据源以及事物管理器注入
/**
* 注入数据源
* @return
*/
@Bean
@ConfigurationProperties(prefix = "datasource")
public DataSource regDataSource() {
return new AtomikosDataSourceBean();
}
/**
* 注入事物管理器
* @return
*/
@Bean(name = "xatx")
public JtaTransactionManager regTransactionManager () {
UserTransactionManager userTransactionManager = new UserTransactionManager();
UserTransaction userTransaction = new UserTransactionImp();
return new JtaTransactionManager(userTransaction, userTransactionManager);
}
4.注解使用
@Override
@Transactional(transactionManager = "xatx", propagation = Propagation.REQUIRED, rollbackFor = { java.lang.RuntimeException.class })
public XXX function() {
}