【问题标题】:How to implement a cron job for multiple sessions each with their own intervals如何为多个会话实施 cron 作业,每个会话都有自己的时间间隔
【发布时间】:2019-08-08 01:20:26
【问题描述】:

我想利用 spring cron 注释在每天三个不同会话中的特定时间间隔内每分钟运行特定服务。

例如: 第一节:上午 8 点 15 分 - 下午 12 点 36 分, 第二场:12:40pm - 3:11pm, 第三场:下午 3:20 - 下午 4:35。

如何设置这个特定示例的 cron 表达式?

我已经在 Oracle 文档中检查了这一点,这是我遇到的最接近的实现

"0 0/5 14,18 * * ? 每 5 分钟触发一次,从下午 2:00 开始,到下午 2:55 结束,并且每 5 分钟触发一次,从下午 6:00 开始,到下午 6:55 结束, 每天”

没有关于不同时间和不同会话之间的间隔的实例

@Scheduled(cron = "0 29-35 11,12 * * ?")
 public static void testCron() {
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   System.out.println("testing cron per minute " + dateFormat.format(date)); }

从上面的测试代码中,它在 11:29 到 11:35 之间打印评论,但在 11:35 之后没有任何内容。下一个打印输出是从 12:29 开始,以此类推。

【问题讨论】:

  • @Scheduledstatic 方法中不起作用,需要是常规方法。只需添加多个@Scheduled 注释即可。
  • 这个实现有效。谢谢你

标签: java spring cron


【解决方案1】:

为了实现这一点,您可以使用多个 @Scheduled 注释来注释您的方法,同时提高议程的可读性和大量性。

@Scheduled(cron = "0 15-36 8-12 * * ?")
@Scheduled(cron = "0 40-11 12-15 * * ?")
@Scheduled(cron = "0 20-35 15-16 * * ?")
 public static void testCron() {
   DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
   Date date = new Date(); 
   System.out.println("testing cron per minute " + dateFormat.format(date)); }

您可能有兴趣使用crontab.guru 在线工具测试一些 crontab 配置。

【讨论】:

    【解决方案2】:

    您可以使用以下表达式:

    @Scheduled(cron = "0 1-2 * * * *", fixedRate = 5000)
    

    使用此表达式的方法从 01:00 到 02:00 每 5 分钟运行一次。修改此表达式并将其用于两种不同的方法。每个人都应该调用你的 testCron 方法

    【讨论】:

      猜你喜欢
      • 2018-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 2012-01-09
      • 2016-09-22
      相关资源
      最近更新 更多