Предыстория:
У меня есть приложение Spring Boot 1.4, работающее с Spring Cloud. Мое приложение использует собственный профиль для получения настроек из внешнего файла config.properties. Сервер конфигурации встроен в то же приложение.
В файле config.properties я добавил следующий параметр:
app.setting=helloworld
Что работает:
Когда я изменяю свойство и отправляю событие REFRESH, соответствующие отмеченные bean-компоненты перезагружаются, и изменение распознается правильно.
Что не работает:
Если я фактически удалю свойство из config.properties (например, закомментировав его), событие REFRESH не сделает ничего для фактического обновления приложения. Spring Cloud, кажется, не распознает тот факт, что свойство удалено, и когда связыватель данных продолжает обновлять состояние мира, он пропускает тот факт, что свойство удалено, и соответствующий компонент, связанный с ним, также должен быть обновлен, и его поле установлено пустым/нулевым и т. д.
Похоже, что сборщик данных смотрит только на то, что в данный момент доступно в конфигурации, и не ведет учет что было по сравнению с тем, что есть.
Единственный способ фактически отключить этот параметр в состоянии конфигурации bean-компонента — не удалить его, а фактически установить для него пустое значение (которое является новым значением, учитывая, что параметр является просто строкой). Обратите внимание, что поле в Java-бине, сопоставленное с этим свойством, не имеет значения по умолчанию, отличного от null, и это значение не определено нигде (например, во встроенном файле application.properties и т. д.).
- Что я могу упустить?
- Это особенность? Ошибка?
Спасибо за ваше время.