如何解决Spring Boot 覆盖来自附加位置文件的 prod 属性
application.properties
application-prod.properties
spring.datasource.password=my-dev-password #默认的
spring.datasource.password=${PROD_DATABASE_PASSWORD} #for 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);
}
}
我正在使用 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
,试试这个。
$ java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
更多详情请参阅此doc。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。