Внешняя конфигурация весенней загрузки в среде docker: application.yml не существует - PullRequest
0 голосов
/ 03 февраля 2020

Прежде чем начать объяснять мою проблему, стоит упомянуть, что, хотя я пытаюсь понять, как использовать плагин 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, но проблема все еще та же.

Я могу убедиться, что файл конфигурации существует в указанном месте и существует никаких проблем с разрешениями (насколько я могу судить).

Интересно, что когда я создаю просто пустой application.yml файл в пути к классам по умолчанию (src/main/resources), он проходит первую проверку, и приложение успешно загружается (с используя фактические значения из /config/application), поэтому независимо от проблемы на нее влияет первоначальная проверка Spring Boot перед передачей файла приложения соответствующим классам.

1 Ответ

0 голосов
/ 10 февраля 2020

Оказывается, единственное, что мне нужно, это следующее:

<container>
    <extraClasspath>/config</extraClasspath> <!-- No need to have * at the end -->
</container>
...