Quartz调度程序 - 之间的时间

时间:2013-01-08 04:07:31

标签: java quartz-scheduler scheduler crontrigger

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

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

我需要做出哪些修改才能满足要求?

3 个答案:

答案 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 * * * * ?");