【问题标题】:Change Spring config connection in runtime在运行时更改 Spring 配置连接
【发布时间】:2018-02-06 17:37:12
【问题描述】:

我需要在运行时更改与数据库的连接。例如,如果请求的参数是 BD1,则连接数据库 1,如果是 BD2,则连接数据库 2,等等

我正在使用弹簧靴。最好的方法是什么。

我有这个@Configuration,但不知道我的存储库如何使用。

@Configuration
public class DataSourceConfiguration {

    @Bean(name = "ccteste")
    @ConfigurationProperties("spring.ciclocairu.teste.datasource")
    @Primary
    public DataSource ciclocairuTeste() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "ccprod")
    @ConfigurationProperties("spring.ciclocairu.prod.datasource")
    public DataSource ciclocairuProd() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "tmccteste")
    @Autowired
    @Primary
    DataSourceTransactionManager transactionManagerCicloCairuTeste(@Qualifier("ccteste") DataSource datasource) {
        DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
        return txm;
    }

    @Bean(name = "tmccprod")
    @Autowired
    @Primary
    DataSourceTransactionManager transactionManagerCicloCairuProd(@Qualifier("ccprod") DataSource datasource) {
        DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
        return txm;

    }
}

【问题讨论】:

  • 如果真的需要,请搜索多租户。但是,基于环境(测试与产品)创建 bean 似乎不合适。应该有一个 DataSource bean,其中 bean 是从一个属性文件配置的。属性文件中的值基于环境。
  • 谢谢,我明白了,但是,这不仅仅是产品与测试,我的想法是我的系统可以连接到我公司的其他子公司

标签: java spring spring-boot spring-data


【解决方案1】:

看起来您正在寻找一些数据源路由。 Spring 有AbstractRoutingDataSource 用于运行时检测应该使用什么数据源。

路由 getConnection() 调用的抽象数据源实现 到基于查找键的各种目标数据源之一。

您也可以通过setDefaultTargetDataSource 方法设置默认数据源。

它的工作原理是:在 bean 配置阶段将所需的数据源放入 AbstractRoutingDataSource 的映射中,当您需要使用特定数据源时,将此源的键放入链接到的上下文中路由器。这个 ds-key 链接到当前线程。

以下是示例:Dynamic DataSource Routing with Spring Spring DataSource Routing

【讨论】:

  • 谢谢,我明白了。但我有一个疑问。例如,如果在很短的时间间隔内向不同的数据库发出了两个请求。春天能做到吗?
  • spring 路由器由 threadLocal 类工作。对于不同的请求,您使用不同的局部变量实例。所以从这个案例来看,这不是问题。
【解决方案2】:
猜你喜欢
  • 1970-01-01
  • 2022-06-12
  • 1970-01-01
  • 2019-01-15
  • 2021-10-03
  • 1970-01-01
  • 1970-01-01
  • 2020-08-09
  • 1970-01-01
相关资源
最近更新 更多