相关文章推荐
完美的抽屉  ·  jquery ...·  1 月前    · 
虚心的梨子  ·  mac ...·  8 月前    · 
失恋的滑板  ·  r语言按条件删除行-掘金·  1 年前    · 
逼格高的楼梯  ·  the json value could ...·  1 年前    · 

Spring+hibernate定义两个定时器在同一时间重复执行两次,是因为使用了两个定时器导致线程紊乱了吗?在Web程序启动的时候会同时执行两个定时器

public void onApplicationEvent(ContextRefreshedEvent arg0) {
    TimerTask task =new TimerTask(){
        @Override
        public void run() {
            //定时内容 }
}
两个定时器都是这样写的,现在出现这样的问题

另外还想知道,一个Application如何加载多个定时任务

刚刚试了,写到一个OnApplicationEvent(){}中解决不了问题,Spring监听器ApplicationListener执行了3遍

public void onApplicationEvent(ContextRefreshedEvent event) { if(event.getSource() instanceof XmlWebApplicationContext){ if(((XmlWebApplicationContext)event.getSource()).getDisplayName().equals("Root WebApplicationContext")){ //TimerTask }}}catch(Exception e){ log4j.error("((XmlWebApplicationContext) applicationEvent.getSource()).getDisplayName() 执行失败,请检查Spring版本是否支持");

这里对问题进行一下说明:

在一个类里面实现了 ApplicationListener 接口,用于在初始化完成后做定时任务TimerTask,但是通过log4j打印日志,发现它执行了3次,其中一次是Spring 框架初始化时执行,另外两次是在项目启动成功后,加载Spring-MVC时执行的。

通过打 breakpoint看到,这两次执行中,onApplicationEvent(ContextRefreshdEvent event)方法中的 event对象值不同,第一次是 Root WebApplicationContext , 据此可以根据对象值来告诉定时器只执行一次即可

评论 ( 0 )