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

Java Quartz scheduler trigger nextFireTime is null

我正在为各种计划频率创建一个 Quartz 触发器。 在函数末尾,我 return 触发器,但在 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();
            }
        }
根据我的经验,

nextFireTime 只解决了 CronTriggers。例如 SimpleTrigger 还有 nextFireTime=null。所以我不会担心。

还要记住这一点:

The value returned is not guaranteed to be valid until after the Trigger has been added to the scheduler.

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