Какова эквивалентность 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 ###");
}
}