Tomcat/Wildfly/Glassfish Startup에서만 메소드/클래스를 실행하는 방법이 있습니까?

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

문제

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> 
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top