java - Spring Boot 覆盖来自其他位置文件的 prod 属性
问题描述
在我的应用程序中,我有这些属性文件:
application.properties
应用程序-prod.properties
里面我有同样的财产
spring.datasource.password=my-dev-password #默认一个
spring.datasource.password=${PROD_DATABASE_PASSWORD} #prod文件
在服务器上,我运行我的应用程序,如下所示:
java -jar "myjar.jar" --spring.profiles.active=prod
到目前为止一切正常。
现在我想使用一个额外的文件来覆盖服务器上的相同属性,例如:
java -jar myjar.jar --spring.profiles.active=prod --spring.config.additional-location=file:/to/folder/application.properties
但它没有用!
我试图将它作为 java 属性传递,但它也不起作用!
java -Dspring.config.additional-location=file:/to/folder/application.properties -jar myjar.jar --spring.profiles.active=prod
我在这里错过了什么?
@SpringBootApplication
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
我正在使用弹簧靴2.3.5
更新
当我只引用它工作的文件夹时:
--spring.config.additional-location=file:/to/folder/
我认为它只需要文件夹,spring.config.location
但当我查看代码时,两者都在ConfigFileApplicationListener中加载了相同的代码:
private Set<String> getSearchLocations() {
Set<String> locations = getSearchLocations(CONFIG_ADDITIONAL_LOCATION_PROPERTY);
if (this.environment.containsProperty(CONFIG_LOCATION_PROPERTY)) {
locations.addAll(getSearchLocations(CONFIG_LOCATION_PROPERTY));
}
else {
locations.addAll(
asResolvedSet(ConfigFileApplicationListener.this.searchLocations, DEFAULT_SEARCH_LOCATIONS));
}
return locations;
}
解决方案
配置文件特定属性优先于默认/附加属性。供参考spring-boot external config。
推荐阅读
- corda - 了解 Corda Enterprise 的恶名
- single-page-application - SPA 解决方案是否适合开发大数据方法应用程序?
- javascript - 找不到 Brain.js 导入
- python - Python。在熊猫中将日期列提取为“星期几”、月份...的几列
- javascript - iframe src 允许所有来源但仍接收跨域错误
- python - Odoo 10:更改树视图中的默认搜索
- angular5 - Angular 5 - Typescript:json2typescript 无法运行包
- mysql - 在 MySQL 插入期间清理
- asp.net - 将 Swagger 与 ASP.NET Boilerplate 一起使用会返回 400 Bad Request 以及 POST、PUT 和 Delete 操作。日志表明防伪令牌存在问题
- php - 按 id 显示帖子,但为什么只有第一个 id 可以读取