使用Atomikos须要能够包含 spring-boot-starter-jta-atomikos 依赖java
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> </dependency>
接下来配置两个数据源mysql
配置信息以下:git
spring.datasource.test.url = jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull spring.datasource.test.username = root spring.datasource.test.password = root spring.datasource.test.minPoolSize = 3 spring.datasource.test.maxPoolSize = 25 spring.datasource.test.maxLifetime = 20000 spring.datasource.test.borrowConnectionTimeout = 30 spring.datasource.test.loginTimeout = 30 spring.datasource.test.maintenanceInterval = 60 spring.datasource.test.maxIdleTime = 60 spring.datasource.test.testQuery = select 1
Java Propertiesgithub
@ConfigurationProperties(prefix = "spring.datasource.test") public class TestDBConfig { private String url; private String username; private String password; /** min-pool-size 最小链接数 **/ private int minPoolSize; /** max-pool-size 最大链接数 **/ private int maxPoolSize; /** max-lifetime 链接最大存活时间 **/ private int maxLifetime; /** borrow-connection-timeout 获取链接失败从新获等待最大时间,在这个时间内若是有可用链接,将返回 **/ private int borrowConnectionTimeout; /** login-timeout java数据库链接池,最大可等待获取datasouce的时间 **/ private int loginTimeout; /** maintenance-interval 链接回收时间 **/ private int maintenanceInterval; /** max-idle-time 最大闲置时间,超过最小链接池链接的链接将将关闭 **/ private int maxIdleTime; /** test-query 测试SQL **/ private String testQuery; // get set 略 }
而后要配置数据源, 须要用XADataSourcespring
@Bean(name = "testDataSource") public DataSource testDataSource() throws SQLException { MysqlXADataSource mysqlXaDataSource = new MysqlXADataSource(); mysqlXaDataSource.setUrl(testConfig.getUrl()); mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true); mysqlXaDataSource.setPassword(testConfig.getPassword()); mysqlXaDataSource.setUser(testConfig.getUsername()); mysqlXaDataSource.setPinGlobalTxToPhysicalConnection(true); AtomikosDataSourceBean xaDataSource = new AtomikosDataSourceBean(); xaDataSource.setXaDataSource(mysqlXaDataSource); xaDataSource.setUniqueResourceName("testDataSource"); xaDataSource.setMinPoolSize(testConfig.getMinPoolSize()); xaDataSource.setMaxPoolSize(testConfig.getMaxPoolSize()); xaDataSource.setMaxLifetime(testConfig.getMaxLifetime()); xaDataSource.setBorrowConnectionTimeout(testConfig.getBorrowConnectionTimeout()); xaDataSource.setLoginTimeout(testConfig.getLoginTimeout()); xaDataSource.setMaintenanceInterval(testConfig.getMaintenanceInterval()); xaDataSource.setMaxIdleTime(testConfig.getMaxIdleTime()); xaDataSource.setTestQuery(testConfig.getTestQuery()); return xaDataSource; }
第二个数据源配置差很少 不贴代码了sql
Mybatis的配置都差很少,就是把数据源换一下,另外把本地事务那段删除就行数据库
而后要配置JTAspringboot
@Configuration @ComponentScan @EnableTransactionManagement public class TransactionManagerConfig { @Bean(name = "userTransaction") public UserTransaction userTransaction() throws Throwable { UserTransactionImp userTransactionImp = new UserTransactionImp(); userTransactionImp.setTransactionTimeout(10000); return userTransactionImp; } @Bean(name = "atomikosTransactionManager", initMethod = "init", destroyMethod = "close") public TransactionManager atomikosTransactionManager() throws Throwable { UserTransactionManager userTransactionManager = new UserTransactionManager(); userTransactionManager.setForceShutdown(false); return userTransactionManager; } @Bean(name = "transactionManager") @DependsOn({ "userTransaction", "atomikosTransactionManager" }) public PlatformTransactionManager transactionManager() throws Throwable { UserTransaction userTransaction = userTransaction(); JtaTransactionManager manager = new JtaTransactionManager(userTransaction,atomikosTransactionManager()); return manager; } }
配置好transactionManagermybatis
找个Service试下就OK了spring-boot
demo地址: https://github.com/CodingZx/springboot-jta
数据库为mysql 就测试表就一个字段 根据mybatis的xml新建一下表便可.