Переопределить Spring-boot application.properties с внешними свойствами - PullRequest
1 голос
/ 10 марта 2020

У меня есть приложение с весенней загрузкой. У меня есть 3 файла свойств:

  1. файл свойств внутри фляги весенней загрузки - myjar.jar с именем application.properties (, который является пакетом внутри jar )

  2. файл свойств вне jar, в расположении jar под configurations / global.properties

  3. файл свойств вне jar, в расположении jar под configurations / java .properties

Проблема в том, что я запускаю следующую команду :

java -Dlogging.config=logback.xml -jar "myjar.jar" spring.config.location=classpath:/application.properties,file:./configurations/global.properties,file:./configurations/java.properties

И я получаю исключение:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'Data.StoresDb.LakeConnectionString' in value "${Data.StoresDb.LakeConnectionString}"
        at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessProperties(AutowiredAnnotationBeanPostProcessor.java:405)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1422)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:594)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
        at org.springframework.beans.fa

в myApplication. java, У меня есть:

@Value("${Data.StoresDb.LakeConnectionString}")
String dataLakeStoreDb;

и в моем application.properties у меня нет значения Data.StoresDb.LakeConnectionString, но у меня do есть его в моем global.properties, я ожидаю, что весна разрешите все файлы, прежде чем пытаться указать значение Data.StoresDb.LakeConnectionString

1 Ответ

1 голос
/ 10 марта 2020

Аргумент / значение передается в виде необработанного Java аргумента:

java -jar "myjar.jar" spring.config.location=...

Аргумент будет присутствовать в String[] args основного класса, но среда Spring не будет об этом знать .
Вы должны поставить перед ним префикс --, чтобы аргумент учитывал среду Spring:

java -jar "myjar.jar" --spring.config.location=...

Из официальной документации :

По умолчанию SpringApplication преобразует любые аргументы параметра командной строки (начиная с «-», например --server.port = 9000) в свойство и добавляет его в среду Spring

Или как В качестве альтернативы передайте его как системное свойство:

java -Dspring.config.location=... -jar "myjar.jar" 

В качестве примечания: остерегайтесь spring.config.location переопределяет местоположения по умолчанию, в то время как spring.config.additional-location, представленный в Spring Boot 2, добавляет указанные местоположения к местоположениям по умолчанию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...