【问题标题】:Spring @Scheduled(cron = "0 * * * * ?") not run every hourSpring @Scheduled(cron = "0 * * * * ?") 不是每小时运行一次
【发布时间】:2018-10-17 14:28:01
【问题描述】:

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

【问题讨论】:

  • 每分钟我认为应该是 */1 * * * * ?
  • @PushpeshKumarRajwanshi 根据 Spring doc,第一个数字是第二个,第二个数字是分钟。你是在建议` * */1 * * * 吗?`
  • 好的,在这种情况下是的,它应该是 * */1 * * * ?
  • cronmaker(cronmaker.com) 建议每分钟的 cron 表达式是 0 0/1 * 1/1 * ? *

标签: java spring spring-boot cron


【解决方案1】:

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

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

所以如果被执行的方法的代码运行超过一分钟,后续的调用就会延迟(不会发生),只是因为线程已经“被占用”了。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 2019-06-09
    • 2012-09-20
    • 2018-02-18
    相关资源
    最近更新 更多