2014-02-25 2 views
0

tomcat에서 cron4j를 사용하고 있습니다.
나는 내가 다시이 서블릿에 실수로 전화를하더라도 어떻게, 한 번 이상이 크론 작업을 시작 방지 할 서블릿cron 작업을 두 번 이상 예약하지 못하게하는 방법

doGet(){ 
    ... 
    S.start(); 
    ... 
} 

내부의 일정을 시작?

+1

doGet()에서 코드를 실행하지 마십시오. 서블릿의 init() 메소드 또는 한 번만 발생하는 다른 코드 경로 (예 : 스프링 시작) –

+0

에서 확인하십시오. 그래서 서블릿을 시작할 때 또는 서블릿을 처음 호출 할 때 서블릿 생성자가 실행됩니다. 새 바람둥이가 다시 시작될 때까지는 더 이상 전화를 걸지 않을 것입니다. –

+1

내 편집을 참조하십시오. Servlet.init() 메서드를 대신 사용하는 것이 가장 좋습니다. 또는 [ServletContextListener] (http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContextListener.html)를 사용할 수 있습니다. Spring을 사용한다면 ApplicationContext에서 Spring을 설정하는 것이 가장 좋습니다. –

답변

0

앞에서 설명한대로 일회성 초기화 코드는 ServletContextListener 또는 Servlet.init() 방법을 사용하는 것이 가장 좋습니다. 그러나 대답을 원하면 doGet()에서 한 번만 수행 한 다음 서블릿에 int counter=0이라는 인스턴스 변수를 선언하고 인스턴스 변수를 선언하십시오. 첫 번째 호출시 doGet()이 증가합니다. counter=1. 카운터 값을 확인하고> 0 인 경우 다시 초기화하지 마십시오. 동기화 된 블록을 사용하여 값을 증가 시키거나 휘발성으로 선언하여 더 공상적으로 만들 수 있습니다.

관련 문제