atomikos 使用说明
atomikos使用两阶段协议实现事务操作,常用于单机多库事务
**********************
引入jar包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-atomikos</artifactId>
<version>2.2.2.RELEASE</version>
</dependency>
**********************
自动配置类
JtaAutoConfiguration:jta自动配置类
@Configuration(
proxyBeanMethods = false
)
@ConditionalOnClass({Transaction.class})
@ConditionalOnProperty(
prefix = "spring.jta",
value = {"enabled"},
matchIfMissing = true
)
@AutoConfigureBefore({XADataSourceAutoConfiguration.class, ActiveMQAutoConfiguration.class, ArtemisAutoConfiguration.class, HibernateJpaAutoConfiguration.class})
@Import({JndiJtaConfiguration.class, BitronixJtaConfiguration.class, AtomikosJtaConfiguration.class})
public class JtaAutoConfiguration {
public JtaAutoConfiguration() {
}
}
AtomikosJtaConfiguration:atomikos自动配置类
@Configuration(
proxyBeanMethods = false
)
@EnableConfigurationProperties({AtomikosProperties.class, JtaProperties.class})
@ConditionalOnClass({JtaTransactionManager.class, UserTransactionManager.class})
@ConditionalOnMissingBean({PlatformTransactionManager.class})
class AtomikosJtaConfiguration {
AtomikosJtaConfiguration() {
}
@Bean(
initMethod = "init",
destroyMethod = "close"
)
@ConditionalOnMissingBean({TransactionManager.class})
UserTransactionManager atomikosTransactionManager(UserTransactionService userTransactionService) throws Exception {
UserTransactionManager manager = new UserTransactionManager();
manager.setStartupTransactionService(false);
manager.setForceShutdown(true);
return manager;
}//transactionmanager不存在则创建userTransactionManager实例
@Bean
JtaTransactionManager transactionManager(UserTransaction userTransaction, TransactionManager transactionManager, ObjectProvider<TransactionManagerCustomizers> transactionManagerCustomizers) {
JtaTransactionManager jtaTransactionManager = new JtaTransactionManager(userTransaction, transactionManager);
transactionManagerCustomizers.ifAvailable((customizers) -> {
customizers.customize(jtaTransactionManager);
});
return jtaTransactionManager;
}//platformTr