在运行时更改Spring配置连接

时间:2018-02-06 17:37:13

标签: java spring spring-boot spring-data

我需要在运行时更改与数据库的连接。例如,如果请求的参数是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;

    }
}

2 个答案:

答案 0 :(得分:1)

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

  

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

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

它以这样的方式工作:在Bean配置阶段将您需要的数据源放在AbstractRoutingDataSource的地图中,当您需要使用特定数据源时,将此源的键放入链接到的上下文中路由器。此ds-key链接到当前线程。

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

答案 1 :(得分:1)