参考来源:
引入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