Java Spring @Scheduled 任务执行两次

2024-03-02

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

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

Output:

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...

为什么它运行两次(appear)每一次?


如果您查看文档,就会发现有一条注释明确指出了这种现象。

注释在下面此链接第 25.5.1 节 http://static.springsource.org/spring/docs/3.0.x/reference/scheduling.html#scheduling-annotation-support-scheduled,并写道:

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

我知道这只是目前的建议,但我认为我们没有足够的信息来进一步诊断问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Spring @Scheduled 任务执行两次 的相关文章

随机推荐