【问题标题】:Proper setting transaction manager with multitenant databases configuration with spring-boot使用 spring-boot 正确设置具有多租户数据库配置的事务管理器
【发布时间】:2017-11-29 14:40:21
【问题描述】:

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

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)

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

【问题讨论】:

    标签: java spring spring-boot spring-jdbc


    【解决方案1】:

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

    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
    

    【讨论】:

      猜你喜欢
      • 2015-04-24
      • 2021-12-11
      • 2015-06-02
      • 2010-10-18
      • 1970-01-01
      • 2014-02-22
      • 2017-07-30
      • 2021-11-07
      • 1970-01-01
      相关资源
      最近更新 更多