KS1*_*KS1 30 java spring schedule
我有一个简单的测试方法,设置为每5秒运行一次,但是看看System.out,你可以看到它似乎做了一些奇怪的事情.
@Scheduled(cron="*/5 * * * * ?")
public void testScheduledMethod() {
System.out.println(new Date()+" > Running testScheduledMethod...");
}
Run Code Online (Sandbox Code Playgroud)
输出:
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...
Run Code Online (Sandbox Code Playgroud)
为什么每次都运行TWICE (出现)?
nic*_*ild 26
如果你查看文档,就会有一个明确指出这种现象的说明.
该说明在此链接的第25.5.1节下,并写着:
确保您没有在运行时初始化同一个@Scheduled注释类的多个实例,除非您确实要为每个此类实例安排回调.与此相关,请确保不要对使用@Scheduled注释并使用容器注册为常规Spring bean的bean类使用@Configurable:否则将获得双初始化,一次通过容器,一次通过@Configurable方面,每个@Scheduled方法的结果被调用两次.
我知道这只是目前的建议,但我认为我们没有足够的信息来进一步诊断问题.
我将我的类声明为“服务”,并使用 @Scheduled 注释将其声明为调度程序。调度程序正常调用它,但是当我们将类声明为服务时。该活动已启动两次。
我删除了服务注释。并在我维护的上下文 XML 中将该类声明为 bean。(在 web.xml 中声明的自定义上下文 XML)。这为我解决了这个问题。希望它能帮助某人。
小智 6
这是因为上下文侦听器而发生的
只需删除
<听众>
<监听器类>org.springframework.web.context.ContextLoaderListener</监听器类>
</监听器>
从 web.xml 来看它应该可以工作。
小智 5
我知道答案!!
不要两次初始化您的计划
掠夺您的网络日志:
WebApplicationContext 一次和servlet一次
所以你servlet.xml别这样
import resource="classpath:applicationContext.xml"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37479 次 |
| 最近记录: |