Spring 引导应用程序特定的外部属性
Spring boot application specific external properties
我正在寻求这个问题的解决方案。
我有几个 属性 文件(application.properties,应用程序-realdb.properties)。假设我从 "realdb" spring 个人资料开始。现在我想在 tomcat 上部署时覆盖我的属性。
我决定将文件放入 /lib 文件夹,因为它自动位于 classpath 上,但我没有找到更好的(即特定于应用程序的 classpath 文件夹)
所以我可以放在那里 application.properties,只要我只有一个应用程序,它就可以工作。如果我有多个 spring 引导应用程序,我想为文件命名(注意:特定于应用程序的命名)
我可以使用应用程序。具体 spring 配置文件并添加 /lib/application-appname.properies,其中包括传递正确配置文件的必要性
我可以使用--spring.config.name,我不喜欢它,因为需要在命令行中传递它(我不是ware可能在 war 文件中执行此操作,也许在 spring boot main class?)
中设置系统 属性
在@ConfigurationProperties(locations = "classpath:appname.properties, prefix..." 它按我想要的方式工作 它被正确覆盖,但仅针对 class 我正在绑定值。
总结:
有没有办法在 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.properties
和 my-app-{profile}.properties
的文件。
我正在寻求这个问题的解决方案。
我有几个 属性 文件(application.properties,应用程序-realdb.properties)。假设我从 "realdb" spring 个人资料开始。现在我想在 tomcat 上部署时覆盖我的属性。 我决定将文件放入 /lib 文件夹,因为它自动位于 classpath 上,但我没有找到更好的(即特定于应用程序的 classpath 文件夹)
所以我可以放在那里 application.properties,只要我只有一个应用程序,它就可以工作。如果我有多个 spring 引导应用程序,我想为文件命名(注意:特定于应用程序的命名)
我可以使用应用程序。具体 spring 配置文件并添加 /lib/application-appname.properies,其中包括传递正确配置文件的必要性
我可以使用--spring.config.name,我不喜欢它,因为需要在命令行中传递它(我不是ware可能在 war 文件中执行此操作,也许在 spring boot main class?)
中设置系统 属性
在@ConfigurationProperties(locations = "classpath:appname.properties, prefix..." 它按我想要的方式工作 它被正确覆盖,但仅针对 class 我正在绑定值。
总结: 有没有办法在 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.properties
和 my-app-{profile}.properties
的文件。