java – 当作业重叠时,spring @scheduled cron的预期行为是什么?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 当作业重叠时,spring @scheduled cron的预期行为是什么?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1270字,纯文字阅读大概需要2分钟。
内容图文
我有一份每小时运行一次的工作,我正在使用Spring的@scheduled cron来安排它.
如果工作需要一个多小时,我从How to prevent overlapping schedules in Spring?开始就明白,下一份工作在第一份工作开始时不会启动.
但这是否意味着它将在第一份工作完成后启动,或者是否错过了机会?
如果我有一个需要10个小时的工作,那么所有错过的cron作业是否会排队,然后在第一个作业在10个小时后完成时逐个执行,或者只是第一个作业运行?
谢谢!
解决方法:
默认情况下,执行是阻塞和单线程,这意味着它们不会同时运行.如果要同时运行作业,也可以将方法注释为@Async.您可能还想查看不同的Executors.
如果您在提供的示例问题中使用fixedDelay,则下一个作业将仅在当前结束之后启动,加上延迟.因此,如果你的工作需要10个小时并且你有一个5000的fixedDelay,那么下一个工作将在10个小时后开始5秒.
如果您正在使用fixedRate,则根据documentation,下一个计划的事件将排队等待运行,但不会被跳过:
If any execution of this task takes longer than its period, then
subsequent executions may start late, but will not concurrently
execute.
如果您只是使用cron,那么作业将排队并依次执行(类似于fixedRate).你可以用一个简单的方法测试它(下面是在Groovy中,但也可以使用普通的Java):
int i = 0
@Scheduled(cron = '* * * * * * ')
void test() {
if (i < 5)
Thread.sleep(10000)
i += 1
println '------------------------' + i // No values skipped
}
你会注意到每个数字都是打印出来的;例如没有循环被跳过.
内容总结
以上是互联网集市为您收集整理的java – 当作业重叠时,spring @scheduled cron的预期行为是什么?全部内容,希望文章能够帮你解决java – 当作业重叠时,spring @scheduled cron的预期行为是什么?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。