原因

在Tomcat的配置文件conf/server.xml中:

1
2
3
4
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/test" />
</Host>

其中<Host>告诉Tomcat,在启动的时候加载webapps下的所有项目工程文件,<Context>又让Tomcat再加载了一遍(一般情况下配置<Context>,主要是由于想域名访问时将工程名去掉的原因配置),这种情况下会导致工程中的quartz定时被两次触发,执行两次

解决办法

将Tomcat的配置文件conf/server.xml修改为:

1
2
3
4
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false">
<Context path="" docBase="/test"/>
</Host>

autoDeploy:是否允许自动部署,默认值是true,即表示 Tomcat 会自动检测appBase目录下面的文件变化从而自动应用到正在运行的 Web 应用程序
deployOnStartup=”false”,表示Tomcat服务器启动时, 不会自动发布appBase目录下所有的Web应用

会出现的问题

但是这样虽然解决了Quartz的执行两次的问题,但也存在另一个问题——无法解压war包。就是war包放到webapps目录下,不会自动解压生成项目文件夹,你所看到的项目文件夹是历史文件夹。所以,这是一个不断修改conf/server.xml的过程。当需要解压文件夹的时候,修改成true,解压完成后,改成false,记得重启Tomcat

PS.

来源:【Java Web】Quartz定时任务执行两次的解决方法_Yngz_Miao的博客-CSDN博客