使用spring-boot正确设置具有多租户数据库配置的事务管理器

时间:2017-11-29 14:40:21

标签: java spring spring-boot spring-jdbc

我在Spring Boot中有多租户数据库。我在map(immutable bean)中存储多个spring JDBC模板(基于tomcat数据源,手动配置)。我在请求中选择了基于uuid的正确数据源(每个数据库的连接池)。我在Spring Boot中禁用了标准配置:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

事务管理器配置的正确方法是什么?使用单一数据源,我可以使用PlatformTransactionManager,但是如何在spring中使用多个jdbc模板/数据源?如果我可以动态设置所有内容,那将是最好的。提前谢谢。

1 个答案:

答案 0 :(得分:0)

这是使用多个数据源的解决方案

http://www.baeldung.com/spring-data-jpa-multiple-databases

配置两个数据源

如果需要配置多个数据源,可以应用上一节中描述的相同技巧。但是,您必须将其中一个DataSource @Primary标记为未来的各种自动配置,以期能够按类型获取。

如果您创建自己的DataSource,则自动配置将退回。在下面的示例中,我们提供的功能集与自动配置在主数据源上提供的功能完全相同

@Bean
@Primary
@ConfigurationProperties("app.datasource.foo")
public DataSourceProperties fooDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@Primary
@ConfigurationProperties("app.datasource.foo")
public DataSource fooDataSource() {
    return fooDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean
@ConfigurationProperties("app.datasource.bar")
public BasicDataSource barDataSource() {
    return (BasicDataSource) DataSourceBuilder.create()
            .type(BasicDataSource.class).build();
}

fooDataSourceProperties必须标记@Primary,以便数据库初始化程序功能使用您的副本(如果您使用它)。

app.datasource.foo.type=com.zaxxer.hikari.HikariDataSource
app.datasource.foo.maximum-pool-size=30

app.datasource.bar.url=jdbc:mysql://localhost/test
app.datasource.bar.username=dbuser
app.datasource.bar.password=dbpass
app.datasource.bar.max-total=30