【问题标题】: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.namespring.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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-01-26
      • 2014-10-09
      • 2022-11-10
      • 1970-01-01
      • 2014-08-18
      • 2014-08-20
      • 1970-01-01
      相关资源
      最近更新 更多