在Spring Boot控制器中有条件地更改spring.datasource.url变量值

时间:2018-03-02 12:12:41

标签: java spring spring-boot spring-jdbc

我正在尝试为不同地区开发微服务。所以我已经在application.properties中配置了spring.datasource.url变量。如果从另一个数据库中检索数据有任何情况,我可以更改" spring.datasource.url"的值。已经在application.properties中设置的变量?

目前我添加了我的application.properties文件,如下所示,

spring.datasource.url=jdbc:postgresql://localhost/<my_DB_Name>
spring.datasource.username=<my_username>
spring.datasource.password=<my_password>
spring.jpa.generate-ddl=true

在我的应用程序中,有一些功能可以从另一个数据库中获取数据。那么我可以有条件地从我的控制器更改url变量吗?

1 个答案:

答案 0 :(得分:1)

动态数据源选择的唯一选择是使用AbstractRoutingDatasource

对评论1的反应: 由于这不是常见用例,因此实例并不多。我之前没有使用它。你最好的选择是this ancient example by Mark Fisher。当然Spring当时是不同的野兽,你需要将这个例子映射到现代API上。特别是Java配置而不是示例中使用的XML配置。但这很容易。

对评论2的反应: 您的区域DB将在targetDataSources地图中指定。决定使用哪个数据源的逻辑将落在determineCurrentLookupKey中,这会将查找键返回到targetDataSources。你需要从控制器传递它,所以如果你找不到其他机制如何注入将用于获取数据源的状态,你仍然可以使用@RequestScope bean并以这种方式传递它。

我相信这个例子很清楚,适合你的用例(假设你有限量的reagion DB)。