【问题标题】:Scheduled task after server restart or crash服务器重启或崩溃后的计划任务
【发布时间】:2019-12-06 00:57:24
【问题描述】:

我有一些与 Spring Boot 应用程序中的 @Scheduled 任务相关的问题

我有一些每月发送一封电子邮件的微服务。我有@Scheduled(cron="every month expression")。但是想象一下,我已经运行了这个服务 15 天(但是我们需要 30 天来发送电子邮件)并且在 16 天服务重新启动或崩溃并在一段时间后再次醒来。这项工作是从第一天开始计算 1 个月,还是从 16 天开始,以此类推?

@Scheduled(cron="0 0 0 1 * *")
public void sendEmail() {
    emailService.sendEmail();
}

我需要在服务器崩溃后,假设这个任务从 15 天开始持续 15 天,并在 15 天后发送一封信,但从第一天开始就没有重新开始计数

【问题讨论】:

  • 您应该为此使用不同的调度程序。它可能是 Jenkins 的工作或其他您可以监控的工作。另外,我猜您想每个月发送一封电子邮件,但是 @Scheduled 注释将发送 N 封电子邮件,因为您部署了 N 个微服务实例。否则,以不同的速率(例如每分钟)安排您的任务并通过数据库管理操作执行。
  • 您也可以使用发送电子邮件的服务。您的微服务会发送一个事件,例如“在日期 Z 发送带有数据 Y 的电子邮件模板 X”,您的电子邮件服务将处理该事件。

标签: java spring-boot scheduled-tasks scheduler cron-task


【解决方案1】:

使用这个 cron :

0 0 0 1 * ?

这将在每个月的第一天运行调度程序,无论服务器何时启动。

【讨论】:

    【解决方案2】:

    cron 表达式旨在在每月或每周的每天或特定日期运行作业,我认为您的理解是错误的。您在特定日期的玉米表达,但没有用于期间跟踪,online corn 使用该在线生成器获取更多信息

    0 0 0 1 * ? *
    

    以上表达式设计为运行At 00:00:00am, on the 1st day, every month

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 2011-02-18
      • 2015-07-07
      • 1970-01-01
      相关资源
      最近更新 更多