В моем приложении 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]