首页 > 解决方案 > Quartz CronTrigger - 触发时间

问题描述

我正在使用石英 cron 表达式来构建 n 个计划事件,我有一个开始日期和结束日期,但是,当一个 crate 表达式时,第二个事件 (getNextValidTimeAfter) 是错误的......

  1. 08-03-19 08:00:00 -- 第一次约会
  2. 05-04-19 08:00:00 -- 日期错误...
  3. 05-07-19 08:00:00
  4. 04-10-19 08:00:00

遵循表达式

0 0 8 ? 1/3 周五#1 *

  org.quartz.CronExpression expression = new org.quartz.CronExpression(cronExpression.getExpression());

    List<Schedule> scheduleList = new ArrayList<>();

    Date nextExecutionDate = cronExpression.getStartDate();

    boolean first = true;

    while (true) {

        Schedule schedule = new Schedule();
        schedule.setStatus(Enums.StatusSchedule.PROGRAMADO);
        schedule.setCronExpression(cronExpression);
        schedule.setServiceOrderType(cronExpression.getServiceOrderType());
        schedule.setEstimatedTime(cronExpression.getEstimatedTime());

        if (first == false)
            nextExecutionDate = expression.getNextValidTimeAfter(nextExecutionDate);
        else
            first = false;

        if (cronExpression.getEndDate().compareTo(nextExecutionDate) <= 0)
            break;

        schedule.setScheduleDate(nextExecutionDate);

        if (CollectionUtils.isEmpty(schedule.getScheduleItems()))
            schedule.setScheduleItems(new ArrayList<>());

        for (GenericShelfData genericShelfData : genericShelfDataList) {

            ScheduleItem scheduleItem = new ScheduleItem();
            scheduleItem.setStatus(Enums.StatusSchedule.PROGRAMADO);
            scheduleItem.setSchedule(schedule);
            scheduleItem.setGenericShelfData(genericShelfData);
            scheduleItem.setScheduleSeparate(Enums.YesOrNo.NAO);
            schedule.getScheduleItems().add(scheduleItem);
        }

        scheduleList.add(schedule);
    }

标签: javacronquartz

解决方案


我的表达是错误的......正确的是...... 0 0 8 ?3/3 周五#2 *

我使用此站点构建表达式:https ://www.freeformatter.com/cron-expression-generator-quartz.html


推荐阅读