2013-04-22 1 views
0

나는 간단한 작업이 있습니다. 서버가 다운 된 경우에도 2 개월마다 첫날에 프로세스를 실행해야합니다. 작업이 매우 쉽습니다. 작업은 매우 쉽습니다.서버가 다운 된 경우에도 매 2 개월마다 프로세스를 스케줄하는 가장 좋은 방법은

ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); 
CronTrigger trigger = new CronTrigger("0 0 1 1 */2 ?"); 
scheduler.schedule(new Runnable() { 
    @Override 
    public void run() { 
     // do the job 
     job(); 
    } 
}, trigger); 

그러나 서버가 다운되어 한 달 전에 직장을 운영한다면 어떻게 될까요? 이 경우 다음 달 초에 내 직무를 수행하고 싶습니다. 나는이 일을 마지막으로 실행될 때 나는 데이터베이스에 저장하기로 결정 내 서버가 시작될 때

private void job() { 
// Store when the job was executed the last time 
} 

지금, 나는 다시 한 번 트리거를 시작할 필요가 있지만 즉시. 트리거를 시작할 때 쉽게 계산할 수 있지만 불행히도 ThreadPoolTaskScheduler에서 적절한 함수를 찾을 수 없습니다. 이 주기적으로 시작 시간에 작업을 실행 할 수 있습니다 기능입니다 : public ScheduledFuture scheduleAtFixedRate(Runnable task, Date startTime, long period)

불행하게도, ThreadPoolTaskScheduler이 public ScheduledFuture schedule(Runnable task, Date startTime, Trigger trigger) 내가 추가 scheduler.execute를 사용하여 기능을 구현 지원하지 않습니다,하지만 문제는 가능은 하나를 사용하여 수행하는 경우 시간표.

+0

Java 기반 솔루션 대신 [crontab] (http://www.thegeekstuff.com/2009/06/15-practical-crontab-examples/)을 사용해보십시오. – ericson

답변

1

java.util.Timer을 사용하면 TimerTask 구현 내에서 다음 TimerTask를 스케쥴 할 수 있습니다.

정확히 2 개월이되어야하는 경우 TimerTask가 시작될 때 다른 TimerTask를 예약해야합니다. 그렇지 않으면 TimerTask가 끝날 때이를 예약 할 수 있습니다.

+0

고마워요, @Oded. 나는 추가 scheduler.execute (나는 대답을 편집했다)를 사용하여 비슷하다. 'Timer.schedule (TimerTask task, Date firstTime, Trigger trigger);와 같은 것을 사용하여 그것을 수행 할 것으로 예상된다. – Michael