Akka-Quartz-Scheduler,如何使用cron表达式

时间:2019-01-11 05:50:07

标签: scala quartz-scheduler scheduler

当我使用作业和触发器来安排消息发布时,它会起作用

 val job = JobBuilder.newJob(classOf[ScheduledMessagePublisher]).withIdentity("Job", "Group").build()
                  val trigger: CronTrigger = TriggerBuilder.newTrigger()
                    .withIdentity("Trigger", "Group")
                    .withSchedule(CronScheduleBuilder.cronSchedule("0 33 10 11 JAN ? 2019"))
                    .forJob("Job", "Group")
                    .build
                  quartz.start()
                  quartz.scheduleJob(job, trigger)

但是,当我使用actor和QuartzSchedulerExtension时,我的代码永远不会触发,日志只写batch acquisition of 0 triggers

val test = context.actorOf(Executor.props(client))
      QuartzSchedulerExtension(context.system).createSchedule("Test", None, "0 33 10 11 JAN ? 2019")
      QuartzSchedulerExtension(context.system).schedule("Test", test, Executor.PublishMessage)

我认为cron表达式"0 33 10 11 JAN ? 2019"中存在问题,因为当我仅使用秒和分钟时,它就可以工作"0 30 * * * ? *"

1 个答案:

答案 0 :(得分:2)

您的cron表达式正确。

但是QuartzSchedulerExtension的默认时区为 UTC 。检查文档here

因此,您明确需要指定当前时区。 解决方法如下:

val test = context.actorOf(Executor.props(client))
  QuartzSchedulerExtension(context.system).createSchedule("Test", None, "0 33 10 11 JAN ? 2019", None, TimeZone.getDefault)
  QuartzSchedulerExtension(context.system).schedule("Test", test, Executor.PublishMessage)