我正在寻找解决这个问题的方法。
我有几个属性文件(application.properties,application-realdb.properties)。假设我从“realdb”弹簧配置文件开始。现在我想在tomcat上部署时覆盖我的属性。 我决定将文件放在/ lib文件夹中,因为它自动在类路径上,我没有找到任何更好的(即特定于应用程序的类路径文件夹)
所以我可以放置application.properties,只要我只有一个应用程序就可以使用它。如果我有多个spring boot应用程序,我想命名该文件(注意:特定于应用程序的命名)
我可以使用app。特定的弹簧配置文件并添加/lib/application-appname.properies,其中包括传递正确配置文件的必要性
我可以使用--spring.config.name,我不喜欢在命令行中传递它的需要(我不知道在war文件中这样做的可能性,也许在spring boot main class中设置系统属性?)
在@ConfigurationProperties中(locations =“classpath:appname.properties,prefix ...”它可以正常工作,但只适用于我正在绑定值的类。
总结: 有没有办法如何在类路径上复制特定命名的文件,从而覆盖 application.properties ????
已更新 建议的解决方案工作我现在可以使用不同的属性名称,但我仍然有在外部类路径中加载文件的问题。
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
所以寻找答案仍然存在
UPDATE2 看起来订单是
1. /config/application-<profile_specific>.properties
2. /application-<profile_specific>.properties
3. /config/application.properties
4. /application.properties
这意味着我无法覆盖所有非配置文件的特定属性,这可能是预期的,但对我来说,如果我只想要一个文件来统治它们都不是很有用。
答案 0 :(得分:7)
您可以在主类中配置spring.config.name
属性,可以在作为可执行档案运行时使用main
方法,也可以在部署为战争时使用configure
方法。例如:
@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
的文件。