【问题标题】:Java Quartz 2.2.1 - ScheduleJava Quartz 2.2.1 - 时间表
【发布时间】:2015-01-07 09:56:28
【问题描述】:

您好,以下代码每 60 秒触发一次。

我怎样才能改变它,让它永远在每天凌晨 4 点触发一次。

我正在使用 Quartz 2.2.1 和 Tomcat 7.0.53

Trigger trigger = TriggerBuilder
.newTrigger()
.withIdentity("TestTrigger", "group1")
.withSchedule(SimpleScheduleBuilder.simpleSchedule().withIntervalInSeconds(interval_seconds).repeatForever())
.build();

我查看了文档示例,但不断出现错误。

【问题讨论】:

    标签: quartz-scheduler


    【解决方案1】:

    您可以将 startAt(Date triggerStartTime) 方法与您想要的时间(凌晨 4 点)一起使用,然后每 24 小时重复一次

         Trigger trigger = newTrigger() 
             .withSchedule(simpleSchedule()
                 .withIntervalInHours(24)
                 .repeatForever())
             .startAt(new SimpleDateFormat("dd/MM/yyyy hh:mmaaa").parse("24/01/2015 04:00AM"))
             .build();
    

    【讨论】:

    • 你能给我看一下 startAt() 的 sn-p 吗?我不断收到错误使用它。 startAt() 的参数是一个 Date 对象。那么我怎样才能只得到时间呢?如果我在 2014 年 1 月 7 日凌晨 4 点通过日期,那么它怎么知道在第二天凌晨 4 点运行它?
    • 谢谢。这很有帮助!
    【解决方案2】:

    使用Cron-based Trigger

    Trigger trigger = TriggerBuilder.newTrigger() 
       .withSchedule(cronSchedule("0 0 4am * * ?"))
       .build();
    

    【讨论】:

      【解决方案3】:

      如果您想要一种更简单的方法来创建日期,请使用DateBuilder 来创建具有所需参数的日期。 dateOf( 或 todayAt) 应该可以工作。

      类似:

      .startAt(DateBuilder.dateOf(4, 0, 0))

      【讨论】:

      • 当我尝试您的建议时,我得到了一个未定义的 dateAt(4, 0, 0)。
      • 我看到我写的是 dateAt() 而不是 dateOf()。我希望它不应该用 dateAt() 编译。我用 dateOf() 编辑了响应,我希望它有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-25
      • 1970-01-01
      • 2014-11-23
      相关资源
      最近更新 更多