如何使用atomikos和hikari在spring-boot中配置全局事务管理器

时间:2018-04-18 14:18:41

标签: java spring spring-boot distributed-transactions

这是我的数据库配置和app.properties

@Configuration
public class DatabaseConfig {

    @Bean
    @ConfigurationProperties(prefix = "datasource.two")
    public HikariConfig hikariConfig2() {
        return new HikariConfig();
    }

    @Bean
    public DataSource dataSource2() {
        HikariDataSource hds = new HikariDataSource(new hikariConfig2());
        return hds;
    }

    @Bean
    public JdbcTemplate jdbcTemplate2() {
        return new JdbcTemplate(dataSource2());
    }

    @Bean
    @ConfigurationProperties(prefix = "datasource.one")
    public HikariConfig hikariConfig2() {
        return new HikariConfig();
    }

    @Bean
    public DataSource dataSource1() {
        HikariDataSource hds = new HikariDataSource(hikariConfig1());
        return hds;
    }

    @Bean
    public JdbcTemplate jdbcTemplate1() {
        return new JdbcTemplate(dataSource1());
    }

}

datasource.one.jdbc-url=...
datasource.one.username=...
datasource.one.password=...
datasource.one.driver-class-name=...

datasource.two.jdbcUrl=...
datasource.two.username=...
datasource.two.password=...
datasource.two.driver-class-name=...

我应该如何创建支持两阶段提交的全局事务管理器。我想用Tomcat在docker中运行这个应用程序,所以没有JavaEE。 也没有冬眠。我正在使用sql-processor和spring-stack:

PS:在一些非常古老的article中,我发现了这个但是如果它能够解决这个问题的话,那么我就会发现这个问题

@Bean
public DataSourceTransactionManager tm1() {
    DataSourceTransactionManager txm = new DataSourceTransactionManager(refDataSource());
    return txm;
}

@Bean
public DataSourceTransactionManager tm2() {
    DataSourceTransactionManager txm = new DataSourceTransactionManager(logDataSource());
    return txm;
}


@Bean(name = "transactionManager")
@Primary
public PlatformTransactionManager transactionManager() throws Throwable {
    return new ChainedTransactionManager(tm1(), tm2());

}

0 个答案:

没有答案