如何在spring web flux中编写cron作业(计划任务)?



我正在spring web flux应用程序中实现忘记密码功能,并且我正在发送一个提前5分钟到期的OTP。所以我想通过每2秒执行一个cron作业来使它们失效。

虽然这是一个web flux项目,但我想先写一个hello world作为cron作业来测试。

我添加了@ enablesscheduling在starter主类和我写了一个测试类。

@Scheduled(cron = "*/2 * * * * *")
public Disposable invalidateOtp(){
return Mono.fromCallable(() -> {
return "Hello";
}).subscribe();
}

但是我想说这个方法不会每隔2秒执行一次。有人能告诉我为什么吗?

这里有一篇关于如何使用cron表达式或固定速率或固定延迟运行计划任务的非常好的文章:Spring中的@Scheduled Annotation。这应该能满足你的所有需求。然而,在某种程度上,我觉得Spring引导中提供的所有选项都不够方便,特别是对于参数的人类可读性而言。您必须以毫秒为单位指定时间,或者使用不太容易阅读的非正则表达式。因此,我希望能够像"9m"9分钟或"3小时"3个小时,以此类推。因此,我编写了自己的后台任务调度程序,可以轻松地与Spring引导一起使用。我将它发布在一个名为MgntUtils的开源库中,该库由我编写和维护。下面是一个Javadoc页面,它解释了我的想法以及如何使用这个特性。(这是MgntUtils库javadoc的一部分)您可以在这里或github上获得Maven工件库(包含javadoc和源代码)。在github上,您可以查看软件包:com.mgnt.lifecycle.management.backgroundrunner.example。该包包含2个计划任务的完整工作示例。如果你下载源代码,你可以直接运行它们,看看它们是如何工作的

我终于找到了答案。我忘记注释我的服务类@Service。否则春天不会发现任何豆子。

最新更新