Свойства обновления сервера конфигурации Spring из локального файла конфигурации - PullRequest
0 голосов
/ 29 июня 2018

В моем приложении Spring Cloud я хотел бы позволить пользователю изменять некоторые настройки по умолчанию. Я сохраняю свойства по умолчанию в application.yml внутри jar и запускаю приложение с

-Dspring.config.additional-location=/some_location/properties_override.yml

Когда пользователь меняет properties_override.yml, я хотел перезагрузить конфигурацию без перезапуска приложения. Сервер конфигурации Spring кажется идеальным механизмом для этого, но я не могу понять, может ли он работать со свойствами, расположенными локально в файловой системе. Когда я смотрю на spring.cloud.config, кажется, что он поддерживает только серверы git, jdbc и svn. Мне не интересен ни один из этих механизмов. Мне интересно, есть ли способ использовать Spring Cloud Config для перезагрузки конфигурации из локального файла в файловой системе?

Использование «родного» профиля кажется правильным решением, но оно создало другую проблему: мне нужны две записи в cloud.config.server.native.searchLocations: одна для application.yml в classpath (в src модуля \ main \ resources \ config folder) и второй путь к файлу. Настройка searchLocations:

 searchLocations: classpath:/config,file:/some_location/properties_override.yml 

Свойства в application.yml не подобраны.

Если мой application.yml, у меня есть запись

custom:
  property: foo

Существует bean-компонент Spring, свойство которого помечено

@Value("${custom.property"})

Без searchLocations в application.yml свойство разрешается. С searchLocations я получаю исключение:

 java.lang.IllegalArgumentException: Could not resolve placeholder 'custom.property' in value "${custom.property}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]

1 Ответ

0 голосов
/ 29 июня 2018

Настройка репозитория на основе файловой системы - это самый простой способ выполнить это. Используйте spring.profiles.active=native, это должно работать. Вот пример использования файла yml:

server:
  port: 8888
spring:
  profiles:
    active: native
  cloud:
    config:
      server:
        native:
          searchLocations: file:///Users/gurinder/projects/application-name/configserver/src/main/resources/config/yourservice

А также проверьте эту ссылку stackoverflow-question . В случае, если вы хотите обновить свои свойства с обновленным. Во-первых, вам нужно использовать аннотацию @RefreshScope в классе приложения Spring boot Main или в том классе, который содержит те свойства, которые необходимо обновить. Во-вторых, вы называете этот URL: http://<yourserver>:8080/refresh, который обновит значения и заменит их более новыми.

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