笔者在最近项目中用到了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>