【问题标题】:Overriden application.yml in multi-module Spring Boot app在多模块 Spring Boot 应用程序中覆盖 application.yml
【发布时间】:2020-12-29 22:06:34
【问题描述】:

有这样一个结构的 Spring Boot 2 应用程序:

parent-module
    module-1
        src
            main
                java
                resources
                - application.yml
    module-2
        src
            main
                java
                resources
                - application.yml

另外,module-1 依赖于 module-2,在 pom.xml dependencies 部分中指定。

问题在于,当我在模块 2 的 application.yml 中指定一些属性时,它们在模块 1 的主组件中不可见(通过 @Value 注释)。

正如here 的回答似乎模块1 的application.yml 覆盖了模块2 的application.yml。有一个解决方法 - 如果我在模块 2 中使用名称 application.yaml 一切正常,但我要添加更多模块,最后,这是肮脏的 hack。

我做错了什么?应该以某种方式指定这样的属性文件层次结构吗? 如果需要,我很乐意提供更多详细信息。

谢谢!

【问题讨论】:

    标签: java spring spring-boot yaml


    【解决方案1】:

    Spring Boot 是一个运行时框架。我知道您的模块本身不是 spring-boot 应用程序(您不能依赖使用 spring boot maven 插件打包的 spring boot 应用程序,因为它产生的工件从 Java 的角度来看并不是真正的 JAR,尽管它确实有 *.jar 扩展名)。

    如果是这样,它们可能是普通的罐子。所以你应该有一个组装应用程序的“特殊”模块。这个特殊的模块在<dependency> 部分中列出了'module1' 和'module2',并且应该在其build 部分中包含spring-boot-maven-plugin 的定义(假设您使用的是maven)。但如果是这样,您实际上不应该拥有多个 application.yml - 这将具有误导性。而是将application.yml 放到那个“特殊”模块的src/main/resources 中。

    如果您出于某种原因确实必须处理多个 application.yaml 文件,请确保您已阅读 this thread

    【讨论】:

      【解决方案2】:

      application.yml,顾名思义,是应用程序级文件,而不是模块级文件。

      它是组装最终应用程序的构建脚本,例如.war 文件,需要包含 application.yml 文件(如果有)。

      如果模块需要属性,并且不能依赖默认值,例如使用@Value("${prop.name:default}") 中的: 语法,他们需要使用@PropertySource("classpath:/path/to/module-2.properties") 提供模块级属性文件。

      注意: 默认情况下,@PropertySource 不加载 YAML 文件(请参阅official documentation),但可以增强 Spring Boot 以支持它。见@PropertySource with YAML Files in Spring Boot | Bealdung


      替代方案:让应用程序级构建脚本(构建.war 文件的那个)将多个模块级构建脚本合并到一个统一的application.yml 文件中。

      【讨论】:

      • 感谢您的帮助。您能否分享一个关于合并“application.yml”文件的替代解决方案示例?
      • @DmitryAdonin 抱歉,这是由您编写代码并决定它们如何合并的。
      猜你喜欢
      • 2020-03-15
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 2023-03-19
      • 2019-03-26
      • 2017-02-09
      相关资源
      最近更新 更多