Весенняя загрузка с @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 должен вызываться автоматически после обновления.