Используйте ServletContextListener и правильно объявите его в web.xml. Этот способ предпочтительнее запуска сервлета. Это более организовано, и ваше намерение очевидно. Также гарантированно выполняется перед любым запросом. Это также дает вам крюк отключения для очистки пула.
Вот фрагмент из моего web.xml, например:
<listener>
<listener-class>
com...ApplicationListener
</listener-class>
</listener>
и вот фрагмент кода из самого класса. Убедитесь, что вы перехватываете исключения, чтобы они не распространялись на ваше серверное приложение, и предоставляйте полезные сообщения журнала - они помогут вам при отслеживании приложения.
public class ApplicationListener implements ServletContextListener {
private ServletContext sc = null;
private Logger log = Logger
.getLogger(ApplicationListener.class);
public void contextInitialized(ServletContextEvent arg0) {
this.sc = arg0.getServletContext();
try {
// initialization code
} catch (Exception e) {
log.error("oops", e);
}
log.info("webapp started");
}
public void contextDestroyed(ServletContextEvent arg0) {
try {
// shutdown code
} catch (Exception e) {
log.error("oops", e);
}
this.sc = null;
log.info("webapp stopped");
}
}
См. API здесь и примеры здесь .