Есть ли способ запустить метод/класс только при запуске Tomcat/Wildfly/Glassfish?
Мне нужно удалить временные файлы при запуске Tomcat, переход к папке, содержащей временные файлы, находится в applicationContext.xml.
Есть ли способ запустить метод/класс только при запуске Tomcat?
Ответ 1
Вы можете написать ServletContextListener, который вызывает ваш метод из метода contextInitialized(). Например, вы присоединяете слушателя к webapp в web.xml, например.
package my;
public class Listener implements javax.servlet.ServletContextListener {
public void contextInitialized(ServletContext context) {
MyOtherClass.callMe();
}
}
Строго говоря, это запускается только один раз при запуске webapp, а не при запуске Tomcat, но это может означать одно и то же.
Ответ 2
Вы также можете использовать (начиная сервлет v3) аннотированный aproach (не нужно ничего добавлять в web.xml):
@WebListener
public class InitializeListner implements ServletContextListener {
@Override
public final void contextInitialized(final ServletContextEvent sce) {
}
@Override
public final void contextDestroyed(final ServletContextEvent sce) {
}
}
Ответ 3
Я уверен, что должен быть лучший способ сделать это как часть жизненного цикла контейнера (отредактируйте: у Хэнка есть ответ - мне было интересно, почему он предлагал SessonListener, прежде чем я ответил), но вы могли бы создать сервлет, который не имеет другой цели, кроме как выполнять одноразовые действия при запуске сервера: