Domanda

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

Esiste un modo per eseguire un metodo / classe solo all'avvio di Tomcat?

È stato utile?

Soluzione

Potresti scrivere un ServletContextListener che chiama il tuo metodo dal metodo contextInitialized () . Alleghi l'ascoltatore alla tua webapp in web.xml, ad esempio

<listener>
   <listener-class>my.Listener</listener-class>
</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 solo una volta all'avvio di webapp, anziché all'avvio di Tomcat, ma ciò può equivalere alla stessa cosa.

Altri suggerimenti

Puoi anche usare (avviando Servlet v3) un approccio annotato (non è necessario 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é stesse suggerendo un SessonListener prima di rispondere) , ma è possibile creare un servlet che non ha altro scopo se non quello di eseguire azioni singole all'avvio del server:

<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> 
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top