Gibt es eine Möglichkeit, eine Methode / Klasse nur auf Tomcat / Wildfly / Glassfish Start ausgeführt wird?
-
03-07-2019 - |
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?
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>