Обновить автоматически настроенные свойства Spring Boot

Могу ли я динамически обновлять свойства, которые используются при настройке автоматической конфигурации Spring Boot?

Например, у меня установлены следующие свойства (через облачную конфигурацию) для автоматической настройки dataSource:

spring.datasource.username=user1
spring.datasource.password=test

Теперь, если я изменю подпорку пароля на сервере конфигурации и нажму на конечную точку /refresh, я вижу, что обновленная опора получена, но DataSource не обновлен.

Я знаю, что могу вручную настроить бины DataSource и убедиться, что они подпадают под RefreshScope, но я надеялся найти способ пометить автоматически настроенные свойства как «обновляемые». У меня есть несколько случаев использования, когда я хотел бы обновить реквизиты, используемые Spring Boot для других bean-компонентов, помимо DataSources, и настройка некоторых из этих bean-компонентов вручную может быть проблемой.

Я не уверен, что автоматически настраиваемые свойства можно сделать «обновляемыми», но вы можете попробовать, могут ли push-уведомления работать на вас. cloud.spring.io/spring-cloud-config/1.4.x/single/…

Indraneel Bende 08.06.2018 06:46

Если вышеперечисленное не работает, можете ли вы сделать запрос функции на странице конфигурации Spring Cloud на github. Это может быть хорошей особенностью.

Indraneel Bende 08.06.2018 06:46

Фактически, как push-уведомления, так и запрос к конечной точке /actuator/refresh обновили свойства источника данных и воссоздали соединение с базой данных. См. Мой ответ ниже для более подробной информации.

pChip 08.06.2018 22:26
4
3
1 439
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я думаю, что заговорил слишком рано, по крайней мере, что касается моего примера с DataSource. Создавалось новое соединение с базой данных с обновленными реквизитами.

Что имеет смысл, особенно если смотреть на документы здесь

Это не повторно подключило некоторые из моих свойств spring.cloud.stream.bindings, которые у меня были, но в этом случае я, вероятно, смогу решить проблему с помощью @RefreshScope.

я все еще сталкиваюсь с той же проблемой. когда я пытался зарегистрировать новый URL-адрес jdbc, это новое значение в файле свойств, но источник данных по-прежнему создается со старым URL-адресом jdbc. Нужно ли нам вручную обновлять / уничтожать / воссоздавать bean-компонент источника данных?

NIkhil Gupta 03.09.2018 21:41

В случае, если автоконфигурированный компонент является неизменяемым, необходимо установить свойство конфигурации (не изменяйте свойства после инициализации).

Вы можете поместить список (набор) классов, которые вам нужно обновить, и у вас нет контроля над исходным кодом, вы можете поместить их в свойство: 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

Другие вопросы по теме