java - Spring boot 从附加位置文件覆盖 prod 属性

在我的应用程序中,我有这些属性文件:

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/

相关文章:

c++ - 什么是 list 文件?

python - 使用 gunicorn 和 Nginx 部署时,Django 应用程序未在生产日志

amazon-s3 - 从 Lambda 函数生成预签名 S3 URL 时为 "Access key

unity3d - 启动时 Unity 中的错误问题

javascript - Jest "Cannot log after tests are don

rust - 为什么 Iterator::filter 方法接受一个可变引用作为 self?

react-native - 升级到 npm7 但库中断太多

reactjs - React Signalr 访问状态变量

android - 尝试在真实手机上启动应用程序时,Expo 卡在无休止的加载屏幕上

vue.js - 如何配置 Vite 来解析嵌套的 SFC CSS url