我们正在构建一个大型Web应用程序作为多个WAR文件。每个WAR文件都是一个Spring Boot应用程序。对于开发和测试,我们可以独立运行这些WAR文件。但在生产中,我们希望在一个Jetty(9.x)实例下一起运行所有WAR文件。
我们的问题是,在这种情况下处理外部化配置的最佳方法是什么?每个WAR文件都有自己需要的一组配置文件(application.properties和其他)。我们如何设置,以便每个WAR文件读取自己的配置文件并忽略其余文件?
答案 0 :(得分:0)
您可以使用spring.config.name
和spring.config.location
为每个应用程序提供其外部配置文件的不同名称和/或位置。我已在您configure
子类中覆盖的SpringBootServletInitializer
方法中设置这些属性。
答案 1 :(得分:0)
另一个可能更好的选择是在每个Spring Boot应用程序的@SpringBootApplication类上使用@PropertySources注释。
例如, 然后,您可以为每个应用程序重命名application.properties,例如app1.properties,app2.properties等。
然后你可以启动Jetty,提供一个通用的配置文件夹 -Dapplication.home = C:/ APPHOME
在每个@SpringBootApplication中,添加一个看起来像这样的@PropertySources注释
@SpringBootApplication
@PropertySources({
@PropertySource("classpath:app1.properties"),
@PropertySource(value = "file:${application.home}/app1/app1.properties", ignoreResourceNotFound = true)
})
public class App1Config {
...
}
在开发过程中,将会读取应用程序#.properties。然后在生产中,当你定义application.home时,application.home / app#/ app#.properties will override the one in the classpath