Прежде всего, вы никогда не должны вызывать System.exit()
из контейнера сервлета, так как могут быть другие приложения, работающие в том же процессе, что и у вас, и было бы невероятно неправильно принудительно уничтожать весь процесс.
Предполагая, что ваш "init servlet" реализует ServletContextListener
, в API / интерфейсе не определен формальный способ передачи сигнала сервлет-контейнеру "Пожалуйста, аккуратно закройте приложение". Однако вы можете выбросить какой-то RuntimeException
из метода contextInitialized()
, который в большинстве контейнеров (по крайней мере, Tomcat) остановит запуск вашего веб-приложения и оставит его в состоянии «остановлено». Однако я сомневаюсь, что Tomcat продолжит вызывать ваших слушателей выключения.
Возможно, вы захотите переосмыслить свой дизайн, чтобы логика критических данных / завершения работы не была так тесно связана с жизненным циклом контейнера сервлета.