Java Spring @Scheduled执行两次任务

2022-09-01 04:33:34

我在这里有一个简单的测试方法,设置为每5秒运行一次,它确实运行一次,但是查看System.out,您可以看到它似乎在做一些奇怪的事情。

@Scheduled(cron="*/5 * * * * ?")
public void testScheduledMethod() {
     System.out.println(new Date()+" > Running testScheduledMethod...");
}

输出:

Wed Jan 09 16:49:15 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:15 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:20 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:20 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:25 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:25 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:30 GMT 2013 > Running testScheduledMethod...
Wed Jan 09 16:49:30 GMT 2013 > Running testScheduledMethod...

为什么它每次都运行两次(出现)


答案 1

如果你看一下文档,就会发现有一个注释明确指出了这种现象。

该说明位于此链接的第25.5.1节下,内容如下:

请确保不要在运行时初始化同一@Scheduled注释类的多个实例,除非您确实希望将回调安排到每个此类实例。与此相关,请确保您不要在bean类上使用@Configurable,这些bean类使用@Scheduled进行注释,并在容器中注册为常规Spring bean:否则您将获得双重初始化,一次通过容器,一次通过@Configurable方面,结果是每个@Scheduled方法被调用两次。

我的理解是,在这一点上,这只是建议,但我认为我们没有足够的信息来进一步诊断这个问题。


答案 2

我知道答案!!

不要初始化您的计划两次

在您的网络日志中掠夺 :

WebApplicationContext一次,一次

所以在你不要做这个servlet.xml

import resource="classpath:applicationContext.xml"

推荐