繁体   English   中英

带有Spring Boot的多租户数据库配置的正确设置事务管理器

[英]Proper setting transaction manager with multitenant databases configuration with spring-boot

我在Spring Boot中有多租户数据库。 我在地图(不可变bean)中存储了多个spring JDBC模板(基于手动配置的tomcat数据源)。 我根据请求中的uuid(每个数据库的连接池)选择合适的数据源。 我通过以下方式禁用了Spring Boot中的标准配置:

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

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

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

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

配置两个数据源

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

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

@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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM