Какова эквивалентность contextDestroyed() в ServletContainerInitializer?

Я должен создать класс, который реализует ServletContextListener добавить событие во время инициализации или завершения работы Tomcat. Тем не менее, класс должен быть расположен в файле JAR внутри WEB-INF/lib, После некоторых чтений я обнаружил, что это невозможно, и альтернативой является использование ServletContainerInitializer, Однако только onStartup() метод доступен.

Есть ли другие альтернативы, где я также могу добавить событие во время закрытия или уничтожения веб-приложения?

Я использую Tomcat 8 и Java 8, кстати.

2 ответа

Решение

Пусть ваш ServletContainerInitializer программно добавить ServletContextListener который в свою очередь делает желаемую работу в своем contextDestroyed(),

servletContext.addListener(YourServletContextListener.class);

Не уверен, как вы проверили свой код. Но этот ServletContextListener отлично работает для меня на Tomcat 8.5.5. Просто попробуйте этот код, не нужно помещать его в отдельный файл JAR.

@WebListener
public class AppContextListener implements ServletContextListener{

    Logger log = LoggerFactory.getLogger(AppContextListener.class);

    @Override
    public void contextInitialized(ServletContextEvent servletContextEvent) {

    }

    @Override
    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        log.info("### Context is destroyed ###");
    }
}
Другие вопросы по тегам