有没有办法只在Tomcat / Wildfly / Glassfish启动时运行方法/类?
我需要删除Tomcat启动时的临时文件,传递给包含临时文件的文件夹在applicationContext.xml中。
有没有办法只在Tomcat启动时运行一个方法/类?
你可以编写一个ServletContextListener
,它从contextInitialized()
方法中调用你的方法。 您将监听器附加到web.xml中的webapp中,例如
<listener> <listener-class>my.Listener</listener-class> </listener>
和
package my; public class Listener implements javax.servlet.ServletContextListener { public void contextInitialized(ServletContext context) { MyOtherClass.callMe(); } }
严格来说,这只在webapp启动时运行一次,而不是Tomcat启动,但这可能是相同的事情。
您也可以使用(启动Servlet v3)一个注释的aproach(不需要添加任何东西到web.xml):
@WebListener public class InitializeListner implements ServletContextListener { @Override public final void contextInitialized(final ServletContextEvent sce) { } @Override public final void contextDestroyed(final ServletContextEvent sce) { } }
我确定在容器生命周期中必须有一个更好的方法来做(编辑:Hank有答案 – 我想知道他为什么在我回答之前build议使用SessonListener
),但是你可以创build一个没有除了在服务器启动时执行一次性操作之外的其他目的:
<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>