我的应用程序有很多数据源, JTA 将管理我的事务,因此我在Spring Boot应用程序中添加了 Bitronix 模块。为了记录,我 注意到它设置了一个JVM唯一ID,默认情况下是应用程序启动时的我的IP地址。
如果我有多个Spring Boot应用程序运行到同一台服务器上,我是否会收到冲突端口,告知 Bitronix 已经在另一个应用程序中运行?我的意思是Bitronix在运行时确实使用了默认的TCP端口,因为 Atomikos 会这样做。
另一点,应该更好地为所有应用程序提供唯一的JTA服务器,或者为每个Spring Boot应用程序配备Bitronix服务器都很好。
application.properties
#################
### Hibernate ###
#################
hibernate.show-sql=true
hibernate.transaction.jta.enabled=true
hibernate.transaction.jta.platform=org.hibernate.engine.transaction.jta.platform.internal.BitronixJtaPlatform
的Maven
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jta-bitronix</artifactId>
</dependency>
爪哇
@Configuration
@EnableTransactionManagement
public class TransactionManagerConfig {
public final static String TRANSACTION_MANAGER = "transactionManager";
/**
* Jboss JTA transaction manager
*
* @return PlatformTransactionManager
*/
@Bean(name = TRANSACTION_MANAGER)
@Conditional(JBossCondition.class)
public PlatformTransactionManager transactionManagerByJta(final JndiTemplate jnditemplate) {
// Get Jta from JEE server
final JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
jtaTransactionManager.setTransactionManagerName("java:jboss/TransactionManager");
jtaTransactionManager.setUserTransactionName("java:comp/UserTransaction");
jtaTransactionManager.setNestedTransactionAllowed(true);
jtaTransactionManager.setJndiTemplate(jnditemplate);
return jtaTransactionManager;
}
/**
* Bitronix JTA transaction manager
*
* @return PlatformTransactionManager
*/
@Bean(name = TRANSACTION_MANAGER)
@Conditional(SpringBootCondition.class)
public PlatformTransactionManager transactionManagerByAtomikos() {
// Get JTA from Bitronix
final JtaTransactionManager jtaTransactionManager = new JtaTransactionManager();
jtaTransactionManager.setTransactionManager(TransactionManagerServices.getTransactionManager());
jtaTransactionManager.setUserTransaction(TransactionManagerServices.getTransactionManager());
return jtaTransactionManager;
}
}
**