我正在使用石英调度程序来安排工作。我有一个案例,我希望每天晚上(晚上9点)到第二天早上(06:00 AM)执行工作。我怎样才能实现这一点。目前我正在初始化像这样的触发器
Trigger trigger2 = newTrigger()
.withIdentity("trigger1", "group1")
.startNow()
.withSchedule(simpleSchedule()
.withIntervalInSeconds(10)
.repeatForever())
.build();
我需要做出哪些修改才能满足要求?
答案 0 :(得分:1)
如果您选择 Quartz CronExpression ,则可以使用类似此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
频率(在本例中为每分钟)取决于您的要求。
答案 1 :(得分:1)
如果您需要每天运行一项工作,您只需要指定工作的开始时间:
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
}
}
答案 2 :(得分:0)
这是一个参考,您可以使用它来使用石英来安排时间。 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 * * * * ?");