Весенняя загрузка с @RefreshScope @PostConstruct @PreDestroy
в моем приложении Spring boot мы используем @RefreshScope
для динамической перезагрузки компонентов после изменения конфигурации. Он работает, но я столкнулся с проблемой при объединении @RefreshScope
на бобах с методами аннотированный @PostConstruct
и @PreDestroy
. Кажется @PostConstruct
не вызывается после обновления.
при загрузке приложения @PostConstruct
метод вызывается нормально. При вызове refresh @PreDestroy
метод также вызывается нормально, и я ожидал бы @PostConstruct
для вызова новый экземпляр proxied bean, но это не так. В этих методах есть важная логика init/destroy, поэтому отсутствие их вызова является проблемой.
кто-нибудь столкнулся с той же проблемой, и это ошибка или "функция"? Есть ли способ заставить это работать?
С наилучшими пожеланиями
1 ответов
я столкнулся с той же проблемой сегодня и смог ее решить, вызвав метод на @RefreshScope
' D bean после обновления. Для этого я добавил обработчик событий для RefreshScopeRefreshedEvent
пораженному Бобу:
@EventListener
public void onRefreshScopeRefreshed(final RefreshScopeRefreshedEvent event) {
getClass();
}
как вы можете видеть, это довольно бессмысленная реализация, но тем не менее этот вызов метода на bean вызывает его инициализацию (@PostConstruct
метод).
это поведение соответствует документация:
Refresh scope beans-это ленивые прокси, которые инициализируются при их использовании (т. е. при вызове метода),
но все же я думаю, что это действительно ошибка и что @PostConstruct
должен вызываться автоматически после обновления.