【问题标题】:externalized configuration for multiple Spring war files in Jetty 9Jetty 9 中多个 Spring 战争文件的外部化配置
【发布时间】:2015-06-23 12:44:01
【问题描述】:
我们正在构建一个包含多个 WAR 文件的大型 Web 应用程序。每个 WAR 文件都是一个 Spring Boot 应用程序。对于开发和测试,我们可以独立运行这些 WAR 文件。但在生产中,我们希望在一个 Jetty (9.x) 实例下一起运行所有 WAR 文件。
我们的问题是,在这种情况下处理外部化配置的最佳方法是什么?每个 WAR 文件都有自己需要的一组配置文件(application.properties 和其他文件)。我们如何进行设置,以便每个 WAR 文件读取自己的配置文件并忽略其余文件?
【问题讨论】:
标签:
configuration
spring-boot
war
jetty-9
【解决方案1】:
您可以使用spring.config.name 和spring.config.location 为每个应用程序的外部配置文件指定一个不同的名称和/或位置。我会在 configure 方法中设置这些属性,您已经在 SpringBootServletInitializer 子类中重写了这些属性。
【解决方案2】:
另一个可能效果更好的选项是在每个 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 {
...
}
在开发中,app#.properties 将被读取。然后在生产中,当你定义application.home时,application.home/app#/app#.propertieswill override the one in the classpath