Java Quartz调度程序触发器nextFireTime为null

时间:2017-01-17 15:35:07

标签: java quartz-scheduler

我正在为各种计划频率创建一个Quartz触发器。 在函数结束时,我返回触发器,但在return语句之前调试输出它。 调试输出为Trigger 'DEFAULT.6da64b5bd2ee-91b0fa99-6e11-4356-a55f-e80353b61fc4': triggerClass: 'org.quartz.impl.triggers.DailyTimeIntervalTriggerImpl calendar: 'null' misfireInstruction: -1 nextFireTime: null。 我担心nextFireTime为空,触发器仍会触发吗?

部分代码如下所示:

if (freqType.equalsIgnoreCase(KpiDefinition.KPI_FREQ_TYPE_DAILY)
                || freqType
                        .equalsIgnoreCase(KpiDefinition.KPI_FREQ_TYPE_SCHEDULED))
        {
            DailyTimeIntervalScheduleBuilder schedule = DailyTimeIntervalScheduleBuilder
                    .dailyTimeIntervalSchedule()
                    .startingDailyAt(startTime)
                    .endingDailyAt(endTime)
                    .onEveryDay()
                    .withInterval(kpiDef.getKpiFrequency().intValue(),
                            IntervalUnit.valueOf(kpiDef.getKpiFreqTimeUnit()))
                    .withMisfireHandlingInstructionIgnoreMisfires();

            Date startDate = kpiDef.getKpiStartDate();
            if (startDate.before(new Date()))
            {
                startDate = new Date();
            }

            if (freqType.equalsIgnoreCase(KpiDefinition.KPI_FREQ_TYPE_DAILY))
            {

                trigger = newTrigger().withSchedule(schedule)
                        .startAt(startDate).build();
            } else if (freqType
                    .equalsIgnoreCase(KpiDefinition.KPI_FREQ_TYPE_SCHEDULED))
            {
                Date endDate = kpiDef.getKpiEndDate();

                // This means that schedule has already passed and so KPI should
                // not be scheduled.
                if (endDate.before(new Date()))
                {
                    logger.debug("getTriggerWithSchedule for KPI " + kpiDef.getKpiDefId() + " null Schedule returned for end date " +endDate.toString());
                    return null;
                }
                trigger = newTrigger().withSchedule(schedule)
                        .startAt(startDate).endAt(endDate).build();
            }
        }

1 个答案:

答案 0 :(得分:1)

根据我的经验,

nextFireTime仅针对CronTrigger解决。例如SimpleTrigger也有nextFireTime=null。所以我不担心。

还要记住:

  

在将Trigger添加到调度程序之后,返回的值不能保证有效。

http://www.quartz-scheduler.org/api/2.1.7/org/quartz/Trigger.html#getNextFireTime()

相关问题