java - 基于 Spring Annotation 的调度程序,即“@Scheduled”没有按照 cron 表达式连续运行
问题描述
我使用了基于 Spring Annotation 的调度程序@Scheduler
并将其设置为每 30 秒运行一次。我的示例代码是这样的。
这是一个使用调度器注解的示例服务代码。
@Service
public class SchedulerJob
{
@Scheduled(cron="*/30 * * * * ?")
public void demoServiceMethod()
{
System.out.println("Job running every 30 seconds");
}
}
上面的代码工作正常,每 30 秒运行一次,但有时它没有运行。当我重新启动服务器时,它再次启动。
谁能用@Scheduler 注释告诉我这种行为的原因。
提前致谢。
解决方案
使用注解设置 Spring 配置 @EnableScheduling
@Configuration
@EnableScheduling
public class RootConfig { .. }
一个类似 cron 的表达式,扩展了通常的 UNIX 定义以包括秒以及分钟、小时、月中的某天、月和周中的某天的触发器。例如“0 * * * * MON-FRI”表示工作日每分钟一次。
cron
有 60 秒的粒度,它不是最好的工具。如果你经常运行它,cron 不会达到亚分钟的分辨率,你将需要找到另一种方法。
尝试使用表达式initialDelayString
定义在第一次执行之前延迟的毫秒数,并fixedDelayString
在最后一次调用结束和下一次调用开始之间以毫秒为单位执行带注释的方法。
@Scheduled(initialDelayString = "${initialDelayString}", fixedDelayString = "${fixedDelayString}")
public void demoServiceMethod()
推荐阅读
- c++ - C++ 列表初始化允许多个用户定义的转换
- java - 如何在 rxJava 中不断尝试直到成功
- javascript - 如何使用 Promise 调用函数
- javascript - 如何将提交的表单数据转换为json数组并使用JQUERY将json数组存储到localstorage
- excel - 交叉检查范围
- autodesk-forge - 尝试创建照片场景时“令牌没有此请求的权限”
- ios - swift:集合中的图像
- php - laravel 5.4 来自不同用途的数据库通用数据
- python - 使用 __getattr__ 方法扩展 Django 用户模型
- c# - 如何等到 ControlTemplate 应用于控件 WPF