Spring @Scheduled(cron =“ 0 * * * *?”)不是每小时运行一次

时间:2018-10-17 05:10:13

标签: java spring spring-boot cron

使用Spring Boot 1.5.4。 @Scheduled(cron = "0 * * * * ?")应该每分钟运行一次任务。在我的一个系统中,它可以完美地每分钟运行,但是在另一个系统(CentOS 6.3)中,它不是每小时都运行,即它在14:58运行,在14:59运行,不在15:00运行,然后在15:01运行。什么会导致此问题?如何调试并找出未按预期运行的原因?

1 个答案:

答案 0 :(得分:0)

这只是一个假设,但是假设Cron表达式正确(否则请再次检查它)并且在不同的计算机上表现不同,则可能是以下原因:

@Scheduled默认以打开单线程java.util.Timer的方式工作。

因此,如果要执行的方法的代码运行超过一分钟,则后续调用将被延迟(不会发生),仅是因为线程已被“占用”。

因此要检查一下自己,请尝试执行以下操作:

定义@Scheduled方法,使其每分钟运行一次,但只打印一些消息进行记录(这样肯定会花费不到一分钟的时间)。 如果您看到它现在可以正常运行,那么这确实是一个问题,如果不是,应该在其他地方。