package indi.mybatis.flying.config; import javax.sql.DataSource; import javax.sql.XADataSource; import javax.transaction.SystemException; import javax.transaction.UserTransaction; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.transaction.jta.JtaTransactionManager; import com.alibaba.druid.pool.xa.DruidXADataSource; import com.atomikos.icatch.jta.UserTransactionImp; import com.atomikos.icatch.jta.UserTransactionManager; import com.atomikos.jdbc.AtomikosDataSourceBean; @Configuration public class DataSourceConfig { @Bean("dataSource1") @Primary public AtomikosDataSourceBean dataSource1() { AtomikosDataSourceBean ds = new AtomikosDataSourceBean(); ds.setXaDataSource(xaDataSource1()); ds.setUniqueResourceName("testdb"); ds.setMinPoolSize(1); ds.setMaxPoolSize(3); ds.setMaxIdleTime(60); return ds; } @Bean("dataSource2") public DataSource dataSource2() { AtomikosDataSourceBean ds = new AtomikosDataSourceBean(); ds.setXaDataSource(xaDataSource2()); ds.setUniqueResourceName("testdb2"); ds.setMinPoolSize(1); ds.setMaxPoolSize(3); ds.setMaxIdleTime(60); return ds; } public XADataSource xaDataSource1() { DruidXADataSource xaDataSource = new DruidXADataSource(); xaDataSource.setUrl( "jdbc:h2:mem:testdb;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MV_STORE=FALSE;MVCC=FALSE;FILE_LOCK=NO"); xaDataSource.setUsername("sa1"); xaDataSource.setPassword("null"); return xaDataSource; } public XADataSource xaDataSource2() { DruidXADataSource xaDataSource = new DruidXADataSource(); xaDataSource.setUrl( "jdbc:h2:mem:testdb2;MODE=MySQL;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MV_STORE=FALSE;MVCC=FALSE;FILE_LOCK=NO"); xaDataSource.setUsername("sa1"); xaDataSource.setPassword("null"); return xaDataSource; } @Bean(name = "springTransactionManager") // 用户数据源的事务管理器 public JtaTransactionManager accountTxManager() { UserTransactionManager atomikosTransactionManager = new UserTransactionManager(); atomikosTransactionManager.setForceShutdown(true); UserTransaction atomikosUserTransaction = new UserTransactionImp(); try { atomikosUserTransaction.setTransactionTimeout(300); } catch (SystemException e) { } JtaTransactionManager springTransactionManager = new org.springframework.transaction.jta.JtaTransactionManager(); springTransactionManager.setTransactionManager(atomikosTransactionManager); springTransactionManager.setUserTransaction(atomikosUserTransaction); springTransactionManager.setAllowCustomIsolationLevels(true); return springTransactionManager; } }