使用spring整合quartz定时任务时重复执行了两遍的问题解决方案

本文介绍了在使用Spring与Quartz进行定时任务整合时遇到的任务重复执行问题。问题源于Tomcat配置,当appBase和docBase同时设置时,导致项目被加载两次。解决方案是将appBase设为空,将docBase设置为项目绝对路径,重启Tomcat后问题得到解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

笔者在最近项目中用到了spring和quartz整合的定时任务框架,实现定时去取数据,更新数据库的功能,但最近却遇到了一个问题,发现存到数据库的数据总是被插入两次,导致数据有重复,通过查看日志发现,特定时间点的定时任务竟然执行了两次,觉得很蹊跷,后来发现,因为我前几天将两个工程(一个是ssm显示数据,另一个就是这个取数据的工程)由原来的放在同一个tomcat下,改成了分别放在两个tomcat下(设置了不同的端口),而这个取数据工程所在的tomcat的server.xml中的配置如下造成上面的问题发生,原因是tomcat加载完appBase="webapps"之后又去加载docBase,因此造成加载两次项目的问题

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">  
  
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
            prefix="localhost_access_log" suffix=".txt"  
            pattern="%h %l %u %t "%r" %s %b" />  
<Context docBase="E:\tomcat\apache-tomcat-7.0.7701\webapps\demo" path="/" reloadable="true" />  
</Host>  

这里appBase与docBase区别 :

appBase是指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于的相对目录.如果没有此项,默认为/webapps。 
docBase是指定Web应用的文件路径.可以给定绝对路径,也可以给定相对于Host的appBase属性的相对路径. 如果Web应用采用开放目录结构,那就指定Web应用的根目录;如果Web应用是个WAR文件,那就指定WAR文件的路径。


解决方法:appBase置空,docBase写项目的绝对路径,再重启tomcat即可

<Host name="localhost"  appBase="" unpackWARs="true" autoDeploy="true">  
  
 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
            prefix="localhost_access_log" suffix=".txt"  
            pattern="%h %l %u %t "%r" %s %b" />  
<Context path="" docBase="E:\tomcat\apache-tomcat-7.0.7701\webapps\demo" reloadable="true"/> </Host>  




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值