Spring не загружает свойства из внешнего файла конфигурации должным образом - PullRequest
0 голосов
/ 14 января 2019

У меня есть внутренний файл application.yml , расположенный в ресурсах classpath со следующими полями:

redis:
  hostname: localhost
  port: 6379
  database: 0
  password:

Существует внешний файл конфигурации: config.properties . Он определяет некоторые поля, которые должны быть переопределены в контексте моего сервера. Файл config.properties :

redis.hostname = db.example.com
redis.password = my_password

Приложение не запускается, так как не может прочитать свойство redis.port в файле конфигурации. Я сомневаюсь, что Spring не сохраняет поля источника свойства ( redis ) полностью, если он уже нашел некоторые поля, определенные во внешнем файле (имя хоста, в данном случае пароль).

Я запускаю приложение, используя следующую команду:

java -jar -Dspring.config.location=file:///home/username/config.properties application.jar

Как заставить Spring правильно переопределить внутренний файл конфигурации, чтобы он переопределял только дополнительные свойства (redis.hostname, redis.password), но при этом сохранял другие поля, определенные во внутреннем файле (например, redis.port, redis). база данных), но не определена во внешнем файле?

P.S .: Я знаю, что это происходит, потому что когда я добавляю свойство redis.port = 6379 во внешний файл конфигурации, приложения работают правильно.

Ответы [ 2 ]

0 голосов
/ 14 января 2019
file:

и

classpath:

необходимо указать, когда вы связываете конфигурацию в своем коде. Когда вы указываете параметр -D, вы можете передать адрес файла свойств относительно местоположения файла JAR.

0 голосов
/ 14 января 2019

Шаг 1: Прочитайте документацию Spring Boot :

Конфигурации локаций ищутся в обратном порядке. По умолчанию настроены местоположения classpath:/,classpath:/config/,file:./,file:./config/. Результирующий порядок поиска следующий:

file:./config/
file:./
classpath:/config/
classpath:/

Когда настраиваемые местоположения конфигурации настраиваются с помощью spring.config.location, они заменяют местоположения по умолчанию . Например, если spring.config.location настроено со значением classpath:/custom-config/,file:./custom-config/, порядок поиска становится следующим:

file:./custom-config/
classpath:custom-config/

Шаг 2: Укажите правильное значение:

-Dspring.config.location=classpath:/,file:///home/username/config.properties
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...