我正在尝试为不同地区开发微服务。所以我已经在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变量吗?
答案 0 :(得分:1)
动态数据源选择的唯一选择是使用AbstractRoutingDatasource。
对评论1的反应: 由于这不是常见用例,因此实例并不多。我之前没有使用它。你最好的选择是this ancient example by Mark Fisher。当然Spring当时是不同的野兽,你需要将这个例子映射到现代API上。特别是Java配置而不是示例中使用的XML配置。但这很容易。
对评论2的反应:
您的区域DB将在targetDataSources
地图中指定。决定使用哪个数据源的逻辑将落在determineCurrentLookupKey
中,这会将查找键返回到targetDataSources
。你需要从控制器传递它,所以如果你找不到其他机制如何注入将用于获取数据源的状态,你仍然可以使用@RequestScope
bean并以这种方式传递它。
我相信这个例子很清楚,适合你的用例(假设你有限量的reagion DB)。