2013-01-08 468 views
1

之間的時間我正在使用石英調度程序調度作業。我有一個情況,我想每天晚上(9:00 PM)到第二天早上(06:00 AM)執行一項工作。我做到了這一點。目前我正在初始化這樣的觸發器石英調度程序 -

 Trigger trigger2 = newTrigger() 
    .withIdentity("trigger1", "group1") 
    .startNow() 
    .withSchedule(simpleSchedule() 
      .withIntervalInSeconds(10) 
      .repeatForever())    
    .build(); 

我需要做什麼修改來滿足要求?

回答

0

這裏是一個ref,你可以用它來安排使用石英的時間。 Java – Job Scheduling in web application with quartz API

這部分可能會幫助您

JobDetail jDetail = new JobDetail("Newsletter", "NJob", MyJob.class); 

     //"0 0 12 * * ?" Fire at 12pm (noon) every day 
     //"0/2 * * * * ?" Fire at every 2 seconds every day 

CronTrigger crTrigger = new CronTrigger("cronTrigger", "NJob", "0/2 * * * * ?"); 
+0

我不想使用crontrigger – vmb

+0

如果你真的不想使用crontrigger,你可以在晚上9點至早上6點安排與開始時間兩種不同的間隔24小時。 –

+0

我想在上午6點停止它 – vmb

1

如果您對Quartz CronExpression選擇,你可以使用這樣0 * 21-23,0-5 ? * *是火了工作的每一分鐘,每天從00:00 AM到05的表達:59 AM從上午9:00至下午23:59,所以:

trigger = newTrigger() 
    .withIdentity("trigger7", "group1") 
    .withSchedule(cronSchedule("0 * 21-23,0-5 ? * *")) 
    .build(); 

記住導入import static org.quartz.CronScheduleBuilder.cronSchedule

頻率(在本例中爲每分鐘)取決於您的要求。

+0

好..我將測試它 – vmb

1

如果您需要的是每天一次,你僅需要指定作業的開始時間運行作業:

newTrigger().withSchedule(
     CronScheduleBuilder.dailyAtHourAndMinute(21,0)).build(); 

Quartz調度不能幫助你,如果計劃的作業(數據庫處理)需要很多小時,它可能會超過上午6點的時間限制。石英只能開始工作。你應該在早上6點停止正在運行的工作。例如,假設工作是一個方法:

public void doSomeDBOperations() { 
    while(have more data to process) { 
     if(Calendar.getInstance().get(Calendar.HOUR_OF_DAY) == 6) { 
      break; 
     } 

     //insert data 
    } 
} 
+0

行..我會嘗試它..感謝您的快速回復 – vmb