用于Spring Boot应用程序的Bitronix / Atomikos的Multiples实例

时间:2016-02-10 18:25:43

标签: java spring spring-boot

我的应用程序有很多数据源, 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;
    }
}

**

0 个答案:

没有答案