1

我正在使用石英调度程序来安排作业。我有一个案例,我想每天晚上(9:00 PM)到第二天早上(06:00 AM)执行作业。我怎样才能实现这一点。目前我正在初始化像这样触发

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

我需要进行哪些修改才能满足要求?

4

3 回答 3

1

如果您选择了Quartz CronExpression,您可以使用这样的表达式0 * 21-23,0-5 ? * *,每天从 00:00 AM 到 05:59 AM 以及从 9:00 PM 到 23:59 PM,每分钟触发一个作业,所以:

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

记得导入import static org.quartz.CronScheduleBuilder.cronSchedule

频率(在此示例中为每分钟)取决于您的要求。

于 2013-01-09T08:01:21.907 回答
1

如果您需要每天运行一次作业,您只需指定作业的开始时间:

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

如果计划的作业(数据库处理)需要很多小时并且可能超过早上 6 点的时间限制,那么 Quartz 调度程序将无法帮助您。Quartz 只开始工作。你应该在早上 6 点停止正在运行的工作。例如假设作业是一个方法:

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

        //insert data
    }
}
于 2013-03-27T10:01:13.757 回答
0

这是一个参考,您可以使用它来使用石英安排时间。 Java – 使用石英 API 的 Web 应用程序中的作业调度

这部分可能会对您有所帮助

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 * * * * ?");
于 2013-01-08T04:25:23.607 回答