本文共 1138 字,大约阅读时间需要 3 分钟。
首先给出解决方案,能解决你的问题但又不感兴趣就不要继续往下阅读了:
把tomcat的conf/server.xml的 <Contex t> 的 docBase设置为 docBase="" ;
今天做的项目需要用到spring强大的定时任务@Scheduled,但是在写好定时任务的配置:
定时任务类:
执行结果:
===========定时任务业务处理逻辑========Tue Jul 31 22:55:00 CST 2018
===========定时任务业务处理逻辑========Tue Jul 31 22:55:00 CST 2018
===========定时任务业务处理逻辑========Tue Jul 31 22:55:05 CST 2018
===========定时任务业务处理逻辑========Tue Jul 31 22:55:05 CST 2018
从打印的日志可以看出,每次定时任务同时执行了两次。查看日志搜索spring-mvc.xml发现:
第105行:2018-07-31 22:32:45,795 [localhost-startStop-1] INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [spring-mvc.xml]
第178行:2018-07-31 22:32:45,795 [localhost-startStop-1] INFO [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] - Loading XML bean definitions from class path resource [spring-mvc.xml]
发现spring-mvc加载了2次,那么也就是所,产生了2个定时任务的实例,所以定时任务会同时执行2次。
tomcat加载项目的时候是通过$TOMCAT_HOME/conf/server.xml来加载的。查看server.xml的<Host> 已经<context>标签发现:
项目的<Host> 标签appBase的webapps会加载webapps下的所有项目,到 <context>标签的docBase会继续加载一次alertSupport这个项目,这样就导致项目加载了2次。
解决方案:把tomcat的conf/server.xml的 <Contex t> 的 docBase设置为 docBase="" ;