gpt4 book ai didi

java - Spring 3.1 @Scheduled 随机触发

转载 作者:行者123 更新时间:2023-12-01 13:42:25 24 4
gpt4 key购买 nike

我正在尝试使用注释 @Scheduled 和 cron 值来执行方法。该方法执行但不遵守 cron。

这是我的类(class):

@Component
public class Test {
private static final Logger LOGGER = LoggerFactory.getLogger(Test.class);

@Scheduled(cron = "*/10 * * * * *")
public void run() {
LOGGER.debug("run()");
}
}

我的 applicationContext.xml 的一部分:

<task:executor id="myExecutor" pool-size="5"/>
<task:scheduler id="myScheduler" pool-size="10"/>
<task:annotation-driven executor="myExecutor" scheduler="myScheduler"/>
<bean id="run" class="xxx.Test"></bean>

我在 xml 中使用 Spring 3.1 和 spring-task-3.1.xsd。

当我开始时,我应该每 10 秒就有一行,我得到了这个:

12/16 15:51:20,033 [---] [DEBUG] [Test:31] - run() 
12/16 15:51:29,996 [---] [DEBUG] [Test:31] - run()
12/16 15:54:09,657 [---] [DEBUG] [Test:31] - run()
12/16 15:54:10,000 [---] [DEBUG] [Test:31] - run()
12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run()
12/16 15:54:34,664 [---] [DEBUG] [Test:31] - run()
12/16 15:55:22,137 [---] [DEBUG] [Test:31] - run()
12/16 15:55:34,656 [---] [DEBUG] [Test:31] - run()
12/16 15:55:39,988 [---] [DEBUG] [Test:31] - run()
12/16 15:55:49,981 [---] [DEBUG] [Test:31] - run()
12/16 15:59:07,278 [---] [DEBUG] [Test:31] - run()

每次执行之间的延迟每次都会发生变化。我使用固定速率或固定延迟进行了测试,但得到了相同的结果。

所以类和方法都被正确找到,但它是随机触发的。

有人知道什么会导致这种行为吗?

我已经搜索了几个小时但没有成功。将计划部分放入 xml 而不是 java 文件中不会改变任何内容,也可以尝试使用 cron 值的属性文件。

最佳答案

您的 cron 表达式位于

@Scheduled(cron = "*/10 * * * * *")

表示“在可被 10 整除的每一秒执行此方法”,换句话说,10、20、30 等。这就是它看起来正在做的事情(+/- 调度程序的精度)

12/16 15:54:09,657 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:10,000 [---] [DEBUG] [Test:31] - run()
12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run()

但有时会跳过或间隔很长

12/16 15:54:19,978 [---] [DEBUG] [Test:31] - run() 
12/16 15:54:34,664 [---] [DEBUG] [Test:31] - run()
12/16 15:55:22,137 [---] [DEBUG] [Test:31] - run()
12/16 15:55:34,656 [---] [DEBUG] [Test:31] - run()
12/16 15:55:39,988 [---] [DEBUG] [Test:31] - run()
12/16 15:55:49,981 [---] [DEBUG] [Test:31] - run()
12/16 15:59:07,278 [---] [DEBUG] [Test:31] - run()

如果 TaskScheduler 中的线程正忙于其他事情或由于某种原因被阻塞,就会发生这种情况。如果您需要更多信息,您需要提供有关您的设置的更多详细信息。

关于java - Spring 3.1 @Scheduled 随机触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20614786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com