Подтвердить что ты не робот

Выключение крюка для веб-приложения Java

Мне нужно сохранить некоторые данные предпочтительнее, когда веб-приложение java остановлено, или когда tomcat остановлен. Как это может быть сделано? Редактировать: любой недостаток, если я использую jvm shutdown hook?

4b9b3361

Ответ 1

Используйте класс, который реализует ServletContextListener в вашем web.xml:

<web-app>
    <!-- Usual stuff here -->
    <listener>
        <listener-class>com.mycompany.MyClass</listener-class>
    </listener>
</web-app>

Ответ 2

Почему вы хотите сделать это специально во время выключения? И вам действительно нужно, чтобы сохранить его (как в "это абсолютно критично?" ), Или вы бы как (как в "было бы хорошо, но я буду жить без него" )?

Важно различать - независимо от того, какой метод вы пытаетесь (сервлет/контекстный прослушиватель, предложенный другими ответами или JVM shutdown hook), есть не гарантирует, что он будет фактически вызван.

События уничтожения сервлетов/контекстных прослушивателей будут запускаться только при нормальном (изящном) завершении работы контейнера или во время перезагрузки приложения. Ключ отключения JVM будет срабатывать и во время прерывания процесса; однако убить процесс (или вырезать мощность), очевидно, не вызовет никого.

Ответ 3

Как дополнение к ответу на leonm:

Если вы используете Spring, вы можете использовать управление жизненным циклом Spring "для достижения аналогичного эффекта. Например, вы можете аннотировать метод в bean с @PreDestroy, чтобы он автоматически вызывался при завершении работы контейнера. Таким образом, вам не нужно ничего помещать в web.xml.

Смотрите Spring beans factory жизненный цикл.

Ответ 4

Я предлагаю использовать ehcache для кэширования этой информации. Если вы используете постоянное хранилище ehcache, то при повторном запуске Tomcat кэшированные данные будут доступны.

По сути, это делегирует проблему ehcache, которая оптимизирована для этих типов проблем.