Регистрация отключающего крюка в Spring 2.5 - PullRequest
9 голосов
/ 01 декабря 2009

У меня есть приложение-пружина, которое не вызывает методы уничтожения bean при завершении работы. Я видел ссылки на то, что это связано с созданием экземпляра в beanRefFactory, и что это можно обойти, вручную вызвав registerShutdownHook () в контексте приложения. Этот метод, похоже, исчез из весны между версиями 2.0-2.5

Может кто-нибудь указать мне, как это делается сейчас?

Спасибо.

Ответы [ 2 ]

17 голосов
/ 01 декабря 2009

Этот метод все еще доступен в ConfigurableApplicationContext и реализован как AbstractApplicationContext.

Так что вы могли бы сделать это

ApplicationContext ctx = ...;
if (ctx instanceof ConfigurableApplicationContext) {
    ((ConfigurableApplicationContext)ctx).registerShutdownHook();
}

В качестве альтернативы, вы можете просто позвонить ((ConfigurableApplicationContext)ctx).close() самостоятельно, закрыв приложение или используя свой собственный хук отключения:

Runtime.getRuntime().addShutdownHook(new Thread() {
    public void run(){
       if (ctx instanceof ConfigurableApplicationContext) {
           ((ConfigurableApplicationContext)ctx).close();
       }
    }
 });
0 голосов
/ 11 марта 2015

Так много возражений, но второе утверждение совершенно неверно: выход из system.ex в java прервет пружину еще до того, как вы доберетесь до выключения, правильный путь - эти 4 пути

1 Интерфейсы обратного вызова InitializingBean и DisposableBean 2 Другие интерфейсы Aware для определенного поведения 3 пользовательских метода init () и destroy () в файле конфигурации bean 4 аннотации @PostConstruct и @PreDestroy

Нажмите здесь !

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...