2013-01-08 239 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