1

在开始解释我的问题之前,值得一提的是,虽然我正在尝试将 Maven Jib 插件与 Spring Boot 和 Kubernetes 结合使用,但即使我尝试使用普通的 docker,问题也是一样的。

我使用 Kubernetes configMap 创建了 application.yml 文件并将其作为外部文件挂载到 Pod ( /config/application.yml)。我一直面临的问题是我的应用程序无法找到该application.yml文件并抛出一个典型的异常:

ERROR [main] org.springframework.boot.SpringApplication: Application run failed
org.springframework.beans.factory.BeanDefinitionStoreException: Failed to parse configuration class [com.example.Application]; nested exception is java.io.FileNotFoundException: class path resource [application.yml] cannot be opened because it does not exist

通过使用不同的参数,我尝试了不同的方法来使用 Jib,如下所示。

  <container>
    <extraClasspath>/config/*</extraClasspath>
    <args>
      <arg>--spring.config.location=file:/config/application.yml</arg>
    </args>
    <jvmFlags>
      <jvmFlag>-Dspring.config.location=classpath:/,classpath:/config/,file:./,file:./config/,file:/config/</jvmFlag>
    </jvmFlags>
  </container>

他们都没有为我工作。我也尝试使用SPRING_CONFIG_NAME环境变量并将其设置file:/config/application.yml为 pod,但仍然是同样的问题。

我可以验证配置文件是否存在于指定位置并且没有权限问题(据我所知)。

application.yml有趣的是,当我在默认类路径中只创建一个空文件时,(src/main/resources)它通过了第一次验证并且应用程序成功加载(使用来自 的实际值/config/application),所以无论是什么问题,它都会受到之前 Spring Boot 初始验证的影响甚至将应用程序文件传递给相应的类。

4

1 回答 1

0

事实证明,我需要的唯一物品如下:

<container>
    <extraClasspath>/config</extraClasspath> <!-- No need to have * at the end -->
</container>
于 2020-02-10T06:48:49.397 回答