Est-il possible d’exécuter une méthode / classe uniquement au démarrage de Tomcat / Wildfly / Glassfish?

Je dois supprimer les fichiers temporaires au démarrage de Tomcat, le passage à un dossier contenant des fichiers temporaires se trouve dans applicationContext.xml.

Est-il possible d’exécuter une méthode / classe uniquement au démarrage de Tomcat?

Vous pouvez écrire un ServletContextListener qui appelle votre méthode à partir de la méthode contextInitialized() . Vous attachez l’écouteur à votre application Web dans web.xml, par exemple

  my.Listener  

et

 package my; public class Listener implements javax.servlet.ServletContextListener { public void contextInitialized(ServletContext context) { MyOtherClass.callMe(); } } 

Ssortingctement parlant, cela ne s’exécute qu’une seule fois au démarrage de l’application Web, plutôt qu’au démarrage de Tomcat, mais cela peut représenter la même chose.

Vous pouvez également utiliser (à partir de Servlet v3) une parsing annotée (inutile d’append quoi que ce soit à web.xml):

  @WebListener public class InitializeListner implements ServletContextListener { @Override public final void contextInitialized(final ServletContextEvent sce) { } @Override public final void contextDestroyed(final ServletContextEvent sce) { } } 

Je suis sûr qu’il doit y avoir un meilleur moyen de le faire dans le cadre du cycle de vie du conteneur (edit: Hank a la réponse – je me demandais pourquoi il SessonListener un SessonListener avant de répondre), mais vous pourriez créer un Servlet sans autre but que d’effectuer des actions ponctuelles au démarrage du serveur:

  Does stuff on container startup StartupServlet StartupServlet com.foo.bar.servlets.StartupServlet 1