Spring 引导应用程序特定的外部属性

Spring boot application specific external properties

我正在寻求这个问题的解决方案。

我有几个 属性 文件(application.properties,应用程序-realdb.properties)。假设我从 "realdb" spring 个人资料开始。现在我想在 tomcat 上部署时覆盖我的属性。 我决定将文件放入 /lib 文件夹,因为它自动位于 classpath 上,但我没有找到更好的(即特定于应用程序的 classpath 文件夹)

所以我可以放在那里 application.properties,只要我只有一个应用程序,它就可以工作。如果我有多个 spring 引导应用程序,我想为文件命名(注意:特定于应用程序的命名)

总结: 有没有办法在 classpath 上复制特定命名的文件,从而覆盖 application.properties????

已更新 建议的解决方案有效我现在可以使用不同的属性名称,但我仍然无法在外部的 classpath 中加载文件。

Adding [applicationConfig: [classpath:/my-app-realdb.properties]] PropertySource with search precedence immediately lower than [applicationConfigurationProperties]
Adding [applicationConfig: [classpath:/config/my-app.properties]] PropertySource with search precedence immediately lower than [applicationConfig: [classpath:/my-app-realdb.properties]]
Adding [applicationConfig: [classpath:/my-app.properties]] PropertySource with search precedence immediately lower than [applicationConfig: [classpath:/config/my-app.properties]]

最后一个在.war,我想/lib/config文件夹应该有优先权

3. A classpath /config package
4. The classpath root

所以寻找答案仍在进行中

更新2 看起来顺序是

1. /config/application-<profile_specific>.properties
2. /application-<profile_specific>.properties
3. /config/application.properties
4. /application.properties

这意味着我无法覆盖,所有这些都具有非配置文件特定的属性,这可能是预期的,但对我来说,如果我只想要一个文件来统治它们并不是很有用。

您可以在主 class 中配置 spring.config.name 属性,或者在 运行 作为可执行存档时的 main 方法中,或者在configure 方法部署为 war 时。例如:

@SpringApplication
public class SampleApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(SampleApplication.class)
            .properties("spring.config.name:my-app");
    }

    public static void main(String[] args) throws Exception {
        new SpringApplicationBuilder(SampleApplication.class)
            .properties("spring.config.name:my-app").build().run(args);
    }

}

进行此更改后,Boot 将查找名为 my-app.propertiesmy-app-{profile}.properties 的文件。