Spring IoC контейнер: настройка бинов, изящное завершение работы контейнера Spring IoC в не веб-приложениях

Этот пост относится только к не веб-приложениям. В веб-реализациях Spring ApplicationContext уже есть код, который корректно завершает работу контейнера Spring IoC при завершении работы соответствующего веб-приложения.

Если вы используете IoC-контейнер Spring в среде, не являющейся веб-приложением (например, в среде рабочего стола расширенного клиента), зарегистрируйте ловушку отключения в JVM. Это гарантирует плавное завершение работы и вызывает соответствующие методы уничтожения для ваших одноэлементных компонентов, чтобы освободить все ресурсы. Вы все еще должны правильно настроить и реализовать эти обратные вызовы уничтожения.

Чтобы зарегистрировать обработчик завершения работы, вызовите метод registerShutdownHook(), который объявлен в интерфейсе ConfigurableApplicationContext, как показано в следующем примере:

Java

import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public final class Boot {

    public static void main(final String[] args) throws Exception {
        ConfigurableApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");

        // добавляем ловушку выключения (shutdown hook) для вышеуказанного контекста...
        ctx.registerShutdownHook();

        // приложение работает здесь...

        // main метод завершается, ловушка вызывается до закрытия приложения...
    }
}

Kotlin

import org.springframework.context.support.ClassPathXmlApplicationContext

fun main() {
    val ctx = ClassPathXmlApplicationContext("beans.xml")

    // добавляем ловушку выключения (shutdown hook) для вышеуказанного контекста...
    ctx.registerShutdownHook()

    // приложение работает здесь...

    // main метод завершается, ловушка вызывается до закрытия приложения...
}


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки