在我的应用程序中,我有这些属性文件:
application.properties
application-prod.properties
里面我有相同的属性
spring.datasource.password=my-dev-password #for the default one
spring.datasource.password=${PROD_DATABASE_PASSWORD} #for the prod file
在服务器上我运行我的应用程序:
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);
}
}
我正在使用 spring-boot 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 .
你也可以在代码中看到相同的 ConfigFileApplicationListener.java
https://stackoverflow.com/questions/68498250/
相关文章:
python - 使用 gunicorn 和 Nginx 部署时,Django 应用程序未在生产日志
amazon-s3 - 从 Lambda 函数生成预签名 S3 URL 时为 "Access key
javascript - Jest "Cannot log after tests are don
rust - 为什么 Iterator::filter 方法接受一个可变引用作为 self?
react-native - 升级到 npm7 但库中断太多
reactjs - React Signalr 访问状态变量