Могу ли я динамически обновлять свойства, которые используются при настройке автоматической конфигурации Spring Boot?
Например, у меня установлены следующие свойства (через облачную конфигурацию) для автоматической настройки dataSource:
spring.datasource.username=user1
spring.datasource.password=test
Теперь, если я изменю подпорку пароля на сервере конфигурации и нажму на конечную точку /refresh, я вижу, что обновленная опора получена, но DataSource не обновлен.
Я знаю, что могу вручную настроить бины DataSource и убедиться, что они подпадают под RefreshScope, но я надеялся найти способ пометить автоматически настроенные свойства как «обновляемые». У меня есть несколько случаев использования, когда я хотел бы обновить реквизиты, используемые Spring Boot для других bean-компонентов, помимо DataSources, и настройка некоторых из этих bean-компонентов вручную может быть проблемой.
Если вышеперечисленное не работает, можете ли вы сделать запрос функции на странице конфигурации Spring Cloud на github. Это может быть хорошей особенностью.
Фактически, как push-уведомления, так и запрос к конечной точке /actuator/refresh обновили свойства источника данных и воссоздали соединение с базой данных. См. Мой ответ ниже для более подробной информации.
Я думаю, что заговорил слишком рано, по крайней мере, что касается моего примера с DataSource. Создавалось новое соединение с базой данных с обновленными реквизитами.
Что имеет смысл, особенно если смотреть на документы здесь
Это не повторно подключило некоторые из моих свойств spring.cloud.stream.bindings, которые у меня были, но в этом случае я, вероятно, смогу решить проблему с помощью @RefreshScope.
я все еще сталкиваюсь с той же проблемой. когда я пытался зарегистрировать новый URL-адрес jdbc, это новое значение в файле свойств, но источник данных по-прежнему создается со старым URL-адресом jdbc. Нужно ли нам вручную обновлять / уничтожать / воссоздавать bean-компонент источника данных?
В случае, если автоконфигурированный компонент является неизменяемым, необходимо установить свойство конфигурации (не изменяйте свойства после инициализации).
Вы можете поместить список (набор) классов, которые вам нужно обновить, и у вас нет контроля над исходным кодом, вы можете поместить их в свойство: spring.cloud.refresh.extra-refreshable
например.:
spring
cloud
refresh
extra-refreshable:
- org.springframework.mail.javamail.JavaMailSenderImpl
см .: https://cloud.spring.io/spring-cloud-static/Greenwich.SR1/single/spring-cloud.html#refresh-scope
Я не уверен, что автоматически настраиваемые свойства можно сделать «обновляемыми», но вы можете попробовать, могут ли push-уведомления работать на вас. cloud.spring.io/spring-cloud-config/1.4.x/single/…