2012-04-25 2 views
2

내 요구 사항은 한번 내가 다음 코드를 사용하여 오전 day.For 실행해야하는 작업 예약 할 수있는 일을 실행합니다한 번 예약 된 작업을

public class setAutoReminder { 
    EscalationDAO escalationDAO=new EscalationDAO(); 
    final SendMail sendMail=new SendMail(); 
    public void fetch(){ 
     Date date=new Date(); 
     Timer timer = new Timer(); 


     timer.schedule(new TimerTask(){ 
      public void run(){ 
       int number=escalationDAO.getAutoReminder(); 
       System.out.println(number); 
       if(number>0) { 
        sendMail.sendMail(); 
       } 
      } 
     },date, 1000000000); 
    } 
} 

을하지만,이 코드는 여러 같소 원하는 실행 하루에 한 번씩 달리는 군. 내가 뭘해야하니?

+0

이 Scheduled' @'봄 봐 또는 석영 –

+1

어, 왜 1000000000가? – SergeS

+0

1000000000000 내가 최대 지연을 원했기 때문에 – milind

답변

4

당신이 후 많은 예약 된 작업이없는 경우 모든 봄 수하물을 추가하지 마십시오. 간단하게하십시오.

Date date=new Date(); 
Timer timer = new Timer(); 

timer.schedule(new TimerTask(){ 
    public void run(){ 
      System.out.println("Im Running..."+new Date()); 
    } 
},date, 24*60*60*1000);//24*60*60*1000 add 24 hours delay between job executions. 

이렇게하면됩니다.

-Siva

+0

괜찮습니다. 시도해 보겠습니다. – milind

+0

閏 초 https://en.wikipedia.org를 지원하지 않습니다./wiki/Leap_second –

3

처럼 (롬복 @Slf4j 사용), 스케줄러가 필요합니다

@Slf4j 
@Component 
public class SetAutoReminder 
{ 
    @Autowired 
    private EscalationDAO escalationDAO; 

    @Autowired 
    private SendMail sendMail; 

    @Scheduled(cron = "0 0 0 * * *") // everyday at midnight 
    public void fetch(){ 
     final int number = escalationDAO.getAutoReminder(); 
     log.debug("Today number: {}", number); 
     if (number>0) { 
      sendMail.sendMail(); 
     } 
    } 
} 

봄 스케줄링에 자습서 : springsource blog

+0

이것에 대한 항아리를 포함해야합니까? 그 롬복은 무엇입니까 – milind

+0

예, 스프링을 설치하고 구성해야합니다. 아마도 여러분이 많은 의존성을 원하지 않는다면 Quartz는 더 나은 접근법 일 것입니다. –

+0

0 0 * * *은 일일 작업의 형식입니다. – jontro

관련 문제