使用Spring Boot 1.5.4。 @Scheduled(cron = "0 * * * * ?")
应该每分钟运行一次任务。在我的一个系统中,它可以完美地每分钟运行,但是在另一个系统(CentOS 6.3)中,它不是每小时都运行,即它在14:58运行,在14:59运行,不在15:00运行,然后在15:01运行。什么会导致此问题?如何调试并找出未按预期运行的原因?
答案 0 :(得分:0)
这只是一个假设,但是假设Cron表达式正确(否则请再次检查它)并且在不同的计算机上表现不同,则可能是以下原因:
@Scheduled
默认以打开单线程java.util.Timer
的方式工作。
因此,如果要执行的方法的代码运行超过一分钟,则后续调用将被延迟(不会发生),仅是因为线程已被“占用”。
因此要检查一下自己,请尝试执行以下操作:
定义@Scheduled
方法,使其每分钟运行一次,但只打印一些消息进行记录(这样肯定会花费不到一分钟的时间)。
如果您看到它现在可以正常运行,那么这确实是一个问题,如果不是,应该在其他地方。