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

Changing spring.datasource.url variable value conditionally within a Spring Boot controller

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

目前我添加了我的 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 变量吗?

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

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

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

我相信这个例子非常清楚并且适合您的用例(假设您的区域数据库数量有限)。