Java 关于quartz scheduler,需要澄清

Java 关于quartz scheduler,需要澄清,java,scheduled-tasks,scheduling,quartz-scheduler,Java,Scheduled Tasks,Scheduling,Quartz Scheduler,关于石英的几个独立问题 如果我希望事件执行一次,那么 trigger.setRepeatCount(0); 考虑到这个片段。事件在计划时间为“现在之前”时运行,在计划时间为将来时无法执行 JobDetail job = new JobDetail(); job.setName(eventType.toString() + " event"); job.setJobClass(Action.class); SimpleTrigger trigger = new SimpleTrigger()

关于石英的几个独立问题

  • 如果我希望事件执行一次,那么

    trigger.setRepeatCount(0);
    
  • 考虑到这个片段。事件在计划时间为“现在之前”时运行,在计划时间为将来时无法执行

    JobDetail job = new JobDetail();
    job.setName(eventType.toString() + " event");
    job.setJobClass(Action.class);
    
    SimpleTrigger trigger = new SimpleTrigger();
    trigger.setStartTime(new Date(momentInTime.inMillis()));
    trigger.setName("trigger");
    
    trigger.setRepeatInterval(repeatFrequency.inMillis());
    trigger.setRepeatCount(SimpleTrigger.REPEAT_INDEFINITELY);
    
    scheduleManager.getScheduler().scheduleJob(job, trigger);
    
  • 使用上述代码,我观察到以下情况

    Time now         : 1352410780356
    Will execute at  : 1352410840356  // 1 min interval
    Execution starts : 1352410840368
    
    现在与计划执行的时间差正好是1分钟

    好的。。尝试更大的间隔

    Time now         : 1352411061156
    Will execute at  : 1352411301156 // 3 min interval
    Execution starts : 1352411301165
    
    再一次。。差别正好是3分钟,如图所示

    执行应及时进行

       new MomentInTime(new DayOfMonth(8), new HourOfDay(15), new MinuteOfHour(48));
    
    它实际上是以当前时间和请求时间之间的偏移量(甚至偏移量)开始的(我应该说,似乎是开始的)

    看起来,如果是
    10:43:25
    ,我想要一个作业在
    10:45:00
    开始,它会计算出两个偶数分钟的差异,并将作业安排在
    10:45:25

    这是什么原因造成的?

    同时,

    public MomentInTime(DayOfMonth day, HourOfDay hour, MinuteOfHour min) {
        calendarInstance = Calendar.getInstance();
    
        // Get current year and month
        int year = calendarInstance.get(Calendar.YEAR);
        int month = calendarInstance.get(Calendar.MONTH);
    
        calendarInstance.set(year, month, day.getValue(), hour.getValue(), min.getValue());
        System.out.println("Time now       : " + System.currentTimeMillis());
        System.out.println("Will execute at: " + calendarInstance.getTimeInMillis());
    }
    
    public long inMillis() {
        return calendarInstance.getTimeInMillis();
    }
    
    一行修复

        calendarInstance.set(Calendar.MILLISECOND, 0);
    
    完成了