Кварцевый планировщик-время между

Я использую кварцевый планировщик для планирования заданий. У меня есть случай, когда я хочу выполнять задание каждый день с ночи (21:00) до утра следующего дня (06:00). Как я могу этого добиться. В настоящее время я инициализирую триггер как это

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

Какую модификацию мне нужно внести, чтобы удовлетворить это требование?


person vmb    schedule 08.01.2013    source источник


Ответы (3)


Если вы выбрали Quartz CronExpression вы можете использовать такое выражение 0 * 21-23,0-5 ? * *, которое запускает задание каждую минуту каждый день с 00:00 до 05:59 и с 21:00 до 23:59, поэтому:

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

Не забудьте импортировать import static org.quartz.CronScheduleBuilder.cronSchedule

Частота (в этом примере каждую минуту) зависит от ваших требований.

person Cristian Porta    schedule 09.01.2013

Если вам нужно запускать задание ОДИН раз в день, вам нужно указать только время начала задания:

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
    }
}
person dcernahoschi    schedule 27.03.2013

Вот ссылка, которую вы можете использовать для планирования времени с помощью кварца. Java - планирование заданий в веб-приложении с кварцевый 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 * * * * ?");
person NoNaMe    schedule 08.01.2013
comment
Я не хочу использовать crontrigger - person vmb; 08.01.2013
comment
Если вы действительно не хотите использовать crontrigger, вы можете запланировать два разных 24-часовых интервала с временем начала в 9 вечера и 6 утра. - person Joshua Martell; 08.01.2013
comment
да .. я буду использовать crontrigger .. тогда как будет CronExpression ... я запутался с cronExpression .. может кто-нибудь, пожалуйста, помогите - person vmb; 08.01.2013
comment
Какую задачу вы собираетесь выполнять в планировщике, чтобы вам нужно было остановить ее самостоятельно ??? - person NoNaMe; 08.01.2013
comment
Я занимался обработкой данных в базе данных и вставкой в ​​новую таблицу. Я хочу сделать это только при низком трафике базы данных. Эта операция может занять много времени. Поэтому я хочу указать временной диапазон. - person vmb; 09.01.2013