J'ai besoin de supprimer les fichiers temporaires au démarrage de Tomcat, le passage à un dossier contenant des fichiers temporaires se trouve dans applicationContext.xml.
Existe-t-il un moyen 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 webapp dans web.xml, par ex.
<listener>
<listener-class>my.Listener</listener-class>
</listener>
et
package my;
public class Listener implements javax.servlet.ServletContextListener {
public void contextInitialized(ServletContext context) {
MyOtherClass.callMe();
}
}
À strictement parler, cela n'est exécuté qu'une seule fois au démarrage de l'application Web, plutôt qu'au démarrage de Tomcat, mais cela peut équivaloir à la même chose.
Vous pouvez également utiliser (à partir de Servlet v3) une approche annotée (pas besoin d'ajouter 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 une meilleure façon de le faire dans le cadre du cycle de vie du conteneur (modifier: Hank a la réponse - je me demandais pourquoi il suggérait un SessonListener
avant de répondre), mais vous pouvez créer un servlet qui n'a d'autre but que d'effectuer des actions ponctuelles au démarrage du serveur:
<servlet>
<description>Does stuff on container startup</description>
<display-name>StartupServlet</display-name>
<servlet-name>StartupServlet</servlet-name>
<servlet-class>com.foo.bar.servlets.StartupServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>