Tomcat/Wildfly/Glassfish Startup에서만 메소드/클래스를 실행하는 방법이 있습니까?
-
03-07-2019 - |
문제
Tomcat Startup에서 임시 파일을 제거해야합니다. Temp 파일이 포함 된 폴더로의 패스는 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();
}
}
엄밀히 말하면, 이것은 Tomcat 스타트 업 대신 WebApp 스타트 업에서 한 번만 실행되지만 같은 일이 될 수 있습니다.
다른 팁
(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) {
}
}
컨테이너 수명주기의 일부로 더 나은 방법이 있어야한다고 확신합니다 (편집 : 행크는 답이 있습니다. 왜 그가 그가 제안했는지 궁금했습니다. SessonListener
내가 대답하기 전에), 그러나 서버가 시작될 때 일회성 작업을 수행하는 것 외에 다른 목적이없는 서블릿을 만들 수 있습니다.
<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>
제휴하지 않습니다 StackOverflow