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

问题描述 投票:1回答:1

我正在尝试为不同地区开发微服务。所以我已经在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变量吗?

java spring spring-boot spring-jdbc
1个回答
1
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.