基於springboot的單應用多資料來源的事務管理簡單實現
阿新 • • 發佈:2021-07-02
SpringBoot單應用多資料來源的分散式事務管理方案:
-
XA實現方案;
在java中通過Spring+JTA的方式實現
在pom檔案中引入jar包:
<!--jta+atomikos分散式事務--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jta-atomikos</artifactId> </dependency>
編寫一個配置資料來源的java類:
@Configuration @MapperScan(basePackages = {"配置該資料來源配置對應的資料來源(mapper的路徑)"}, sqlSessionFactoryRef = "userdbSqlSessionFactory") public class UserDBDataSource4jtaConfig { @Value("${spring.datasource.userdb.username}") private String username; @Value("${spring.datasource.userdb.password}") private String password; @Value("${spring.datasource.userdb.driverClassName}") private String driverClassName; @Value("${spring.datasource.userdb.jdbcUrl}") private String jdbcUrl; /** * 配置一個數據源的bean * @return */ @Bean(name = "userdbDataSource") public DataSource userdbDataSource() { //建立一個XA資料來源 MysqlXADataSource xaDataSource = new MysqlXADataSource(); xaDataSource.setUrl(jdbcUrl); xaDataSource.setUser(username); xaDataSource.setPassword(password); AtomikosDataSourceBean atomikosDataSourceBean = new AtomikosDataSourceBean(); atomikosDataSourceBean.setXaDataSource(xaDataSource); atomikosDataSourceBean.setUniqueResourceName("userdbDataSource"); atomikosDataSourceBean.setMaxPoolSize(30); atomikosDataSourceBean.setMinPoolSize(5); return atomikosDataSourceBean; } @Bean(name = "userdbSqlSessionFactory") public SqlSessionFactory userdbSqlSessionFactory(@Qualifier("userdbDataSource") DataSource userdbDataSource) throws Exception { SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean(); sqlSessionFactoryBean.setDataSource(userdbDataSource); return sqlSessionFactoryBean.getObject(); } @Bean(name = "userdbSqlSessionTemplate") public SqlSessionTemplate userdbSqlSessionTemplate(@Qualifier("userdbSqlSessionFactory") SqlSessionFactory userdbSqlSessionFactory) { return new SqlSessionTemplate(userdbSqlSessionFactory); } }
使用:然後在具體的serviceimpl方法中新增
@Transactional
註解即可。