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