【发布时间】: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