Quartz调度程序 – 之间的时间

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

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

我需要做些什么修改才能满足要求?

如果你选择了Quartz CronExpression,你可以使用像这样的表达式0 * 21-23,0-5 ? * * 0 * 21-23,0-5 ? * *每天从凌晨00:00到凌晨05:59以及从晚上9点到晚上23:59分别开始工作,所以:

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

请记住导入import static org.quartz.CronScheduleBuilder.cronSchedule

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

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

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

如果预定作业(数据库处理)需要很长时间并且可能超过6AM时间限制,Quartz调度程序无法帮助您。 Quartz只会启动这项工作。 你应该在早上6点停止正在运行的工作。 例如,假设作业是一种方法:

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

这是一个参考,您可以使用它来使用石英来安排时间。 Java – 使用quartz 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 * * * * ?");