【问题标题】:Quartz scheduler incorrect schedule time石英调度器不正确的调度时间
【发布时间】:2020-09-09 07:37:50
【问题描述】:

我有一个 Spring Boot 应用程序,我在其中尝试使用石英调度程序安排一个作业,以便每天在一天中的特定时间运行。以下是我构建触发器的代码。

DailyTimeIntervalScheduleBuilder scheduleBuilder = DailyTimeIntervalScheduleBuilder
.dailyTimeIntervalSchedule()
.startingDailyAt(TimeOfDay.hourAndMinuteFromDate(activeStartTime))
.endingDailyAfterCount(1)
.withMisfireHandlingInstructionFireAndProceed();

MutableTrigger trigger = scheduleBuilder.build();

我面临的问题是作业已安排但从第二天开始。例如,如果我将作业安排在 5 月 22 日 16:45,那么作业的第一次触发时间将设置为 5 月 23 日 16:45

我尝试使用 withIntervalInHours(24) 而不是 endingDailyAfterCount(1) 的构建器,但结果是一样的。

我不确定问题出在哪里。

注意:无论我什么时候安排我的工作,这个行为都是一样的,也就是说,不管我是在 16:45 之前还是之后执行这段代码, 作业总是安排在第二天

我使用的是spring boot版本1.5.10和spring-boot-starter-quartz版本2.2.5.RELEASE

【问题讨论】:

    标签: java spring-boot quartz-scheduler


    【解决方案1】:

    你可以试试下面的代码

    CalendarIntervalScheduleBuilder schedule = CalendarIntervalScheduleBuilder
                    .calendarIntervalSchedule()
                    .inTimeZone(TimeZone.getDefault())
                    .withIntervalInDays((int) 1)
                    .withMisfireHandlingInstructionFireAndProceed();
    
    Trigger trigger = TriggerBuilder
                    .newTrigger()
                    .startAt(startDateTime)
                    .withSchedule(schedule).build();
    

    对于字段startDateTime,请使用当前日期时间。如果您想从May 22 16:45 开始,则相应地创建Date 对象。

    同时设置timezone,否则它将选择默认系统的时区。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2019-06-20
      相关资源
      最近更新 更多