【问题标题】:Spring Boot EnvironmentPostProcessor not loading application.propertiesSpring Boot EnvironmentPostProcessor 未加载 application.properties
【发布时间】:2020-05-19 09:15:15
【问题描述】:

我有一个自定义 EnvironmentPostProcessor,它向环境添加了一个属性。为了正确添加此属性,我需要知道一个 url,它取决于我正在使用的配置文件,每个应用程序属性中存在的 url。一切正常,直到我将本地模块添加为依赖项,该模块使用spring-cloud-starter-vault-config。现在环境没有应用程序属性值,但具有其他模块的值。请看下面的视觉表示:

myProcessor
 - resources
   -- application.properties
   -- application-dev.properties
newlyAddedModdule/Dependency
 - resources
  -- application.properties

如何让项目加载 application.properties 而不是其他模块属性?

P.S:我更喜欢我自己不读取应用程序属性文件而是让 ConfigurableEnvironment 像以前一样为我提供这些的解决方案。

【问题讨论】:

  • 我怀疑您的环境后处理器正在 Spring Cloud 的引导上下文中运行。然后它将在主应用程序上下文中再次运行。您可能只能忽略引导上下文中的调用。我相信您可以通过包含名为 bootstrap 的属性源的环境来识别该调用。
  • 没错,我有一个引导映射,但我没有我需要的属性。在引导程序中移动它们不是一种选择,因为我们正在讨论不同的模块

标签: java spring spring-boot kotlin


【解决方案1】:

最好的方法可能是将正确的值放入保险库。但我想这不是一个选择。

另一种方法是赋予 myProcessor 的属性更高的优先级。见Spring Externalized Configuration order

我找到的最简单的方法是将 newAddedModule-properties 放在一个 jar 中,并将 myProcessor-properties 放在类路径上。

【讨论】:

    【解决方案2】:

    我找到的最简单的方法(并且有效)是在以下结构下重命名我的属性文件:

     - application.properties
     - bootstrap-dev.properties
     - bootstrap-prod.properties
    

    因为我需要某个配置文件下的属性,所以配置文件将与 Vault 引导程序同时加载

    【讨论】:

      猜你喜欢
      • 2016-03-04
      • 2020-03-04
      • 2020-09-07
      • 2018-07-20
      • 1970-01-01
      • 2021-02-07
      • 1970-01-01
      • 1970-01-01
      • 2015-01-03
      相关资源
      最近更新 更多