Gibt es eine Möglichkeit, eine Methode / Klasse nur auf Tomcat / Wildfly / Glassfish Start ausgeführt wird?

StackOverflow https://stackoverflow.com/questions/158336

Frage

I temporäre Dateien auf Tomcat-Start entfernen müssen, die der Pass in einen Ordner temporäre Dateien enthält, ist in applicationContext.xml.

Gibt es eine Möglichkeit, eine Methode / Klasse nur auf Tomcat Start ausgeführt wird?

War es hilfreich?

Lösung

Sie könnten einen ServletContextListener schreiben, die Ihre Methode aus der contextInitialized() Methode aufruft. Sie legen den Hörer auf Ihre Webapp in web.xml, z.

<listener>
   <listener-class>my.Listener</listener-class>
</listener>

und

package my;

public class Listener implements javax.servlet.ServletContextListener {

   public void contextInitialized(ServletContext context) {
      MyOtherClass.callMe();
   }
}

Genau genommen ist dies nur ausgeführt, wenn auf Webapp Start, anstatt Tomcat-Start, aber das kann auf dasselbe hinaus.

Andere Tipps

Sie können auch verwenden, eine kommentierte aproach (Servlet v3 Start) (keine Notwendigkeit, etwas zu web.xml hinzugefügt werden):

   @WebListener
    public class InitializeListner implements ServletContextListener {

        @Override
        public final void contextInitialized(final ServletContextEvent sce) {

        }

        @Override
        public final void contextDestroyed(final ServletContextEvent sce) {

        }
    }

Ich bin sicher, dass es ein besserer Weg, um es von dem Behälterlebenszyklus als Teil zu tun (edit: Hank hat die Antwort - ich frage mich, warum er eine SessonListener was darauf hindeutet, bevor ich antwortete), aber man kann einen Servlet erstellen , die keinen anderen Zweck hat als einmalige Aktionen auszuführen, wenn der Server gestartet wird:

<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> 
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top