C’è un modo per eseguire un metodo / class solo all’avvio di Tomcat / Wildfly / Glassfish?

Ho bisogno di rimuovere i file temporanei all’avvio di Tomcat, il passaggio a una cartella che contiene i file temporanei è in applicationContext.xml.

C’è un modo per eseguire un metodo / class solo all’avvio di Tomcat?

È ansible scrivere un ServletContextListener che chiama il metodo dal metodo contextInitialized() . Alleghi l’ascoltatore alla tua webapp in web.xml, ad es

  my.Listener  

e

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

A rigor di termini, questo viene eseguito una sola volta all’avvio di webapp, piuttosto che all’avvio di Tomcat, ma potrebbe essere lo stesso.

Puoi anche usare (avviando Servlet v3) un aproach annotato (non c’è bisogno di aggiungere nulla a web.xml):

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

Sono sicuro che ci deve essere un modo migliore per farlo come parte del ciclo di vita del contenitore (modifica: Hank ha la risposta – mi chiedevo perché suggeriva un SessonListener prima di rispondere), ma potresti creare un servlet che non ha altro scopo che eseguire azioni una tantum all’avvio del server:

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