Quartz每次调度时被执行两次
[关键字:重复执行、重复调用、每次执行两次、执行2次]
前言:
先说一下,项目背景。由于组内某成员在用Maven搭建项目时不规范,导致项目的名称与实际访问项目名称不一致。
在部署项目时,必需要配一下虚拟路径,映射到那个项目所在目录下去,才能正常访问。
举个例子:项目名称叫student-web,部署到Tomcat-webapps下,本地环境正常情况下的访问url应该是:
127.0.0.1:8080/student-web
而实际访问的url需要这样:
127.0.0.1:8080/student
0x001: 初探
那首先想到问题的解决方案就是在Tomcat的server.xml内配置虚拟路径,来映射到实际项目。比如这样:
<Host .......>
<Context path="/student" docBase="D:\apache-tomcat\webapps\student-web" reloadable="true"/>
</Host>
呐,一开始以为这样问题就解决了。后来发现,实则不是。这样做的后果是项目会被容器实例化两次。
0x002: why?
首先需要了解<Host>标签中的appBase属性和<Context>标签中的docBase属性的作用和区别是什么?
appBase属性:这个目录下面的子目录将自动被部署为web应用,且war文件将被自动解压缩并部署为web应用(默认为Tomcat下webapps目录)注意这句话所说的每件(个)事(点)都可以被重新配置或取消。
docBase属性: docBase属性位于<Context>标签中,而<Context>标签的作用是用于指向不在webapps下的应用的所在目录,在tomcat启动时docBase属性指向的目录下的应用也被作为web项目同时启动。
在有了以上了解后,那Quartz每次调度时被执行两次方法的问题原因就找到了。
0x003: 解决方案
1.将<Host>标签内的<Context>标签去除,让Tomcat自动去扫描webapps下的应用并部署。
2.若 ‘必需使用<Context>标签’ 且 ‘必需配置虚拟路径映射’ (注意这句话,后边解释),则必需将项目移出webapps目录至某个新目录,同时将<Context>标签中的docBase属性指向该新移至的目录,如下图

解释一下第2条的前半句,经过测试发现,将student-web项目放到webapps目录,且同时配置<Context>标签的path属性为“/项目名称”,启动Tomcat,此时项目并不会跑两遍,还是一遍,因为path属性指定的值还是项目名称,等于没配置。如下:
<Host .......>
<Context path="/student-web" docBase="D:\apache-tomcat\webapps\student-web" reloadable="true"/>
</Host>
若是配置<Context>标签的path属性值为 “/非项目名称” 且 docBase属性指向webapps目录,那项目肯定会被容器实例化两遍!如下:
<Host .......>
<Context path="/student" docBase="D:\apache-tomcat\webapps\student-web" reloadable="true"/>
</Host>
至于选择哪种解决方案,根据实际情况定,那我这里只能选择第2种。
0x004: 声明
导致Quartz调度任务被执行两次的原因有很多,以上列举的2种解决方案 可能 并 不适合你。亦可从其他方向查找原因。
比如,检查Quartz的xml配置文件被加载了2次等等。
0x005: 完结
分享是技术进步的源泉,作者能力有限,如有错误,欢迎指出,不吝赐教。
Quartz每次调度时被执行两次的更多相关文章
- quartz 应用到 spring定时任务 执行两次
https://my.oschina.net/superkangning/blog/467487
- spring定时器,定时器一次执行两次的问题
Spring 定时器 方法一:注解形式 配置文件头加上如下: xmlns:task="http://www.springframework.org/schema/task" htt ...
- quartz执行两遍问题
转:http://blog.csdn.net/hejinwei_1987/article/details/49100975 在现在的项目中发现Quartz执行了两次,在网上找到下列解决方案,我是用的第 ...
- 分析解决 spring quartz 中出现的执行两次问题
1. 问题描述 在开发询盘功能时,遇到一个需求,就是后台定时任务执行用电施工业务的工单下发. 使用的技术是 spring quartz,因为其他应用有先例,配置quartz 完成后,先写了一个 hel ...
- spring quartz执行两次问题
解决quartz定时任务被触发两次的问题: 其中<Host/>告诉tomcat,在启动的时候加载webapps下的所有项目工程文件,<Context/>又让tomcat再加载了 ...
- Quartz定时调度jar包的执行Demo分享
1.Quartz简介 Quartz框架的核心是调度器.调度器负责管理Quartz应用运行时环境.调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件.Quartz不仅仅是线程和线程管理. ...
- ajax跨域往php程序post数据时,php程序总是执行两次的解决方法
php程序是部署在IIS7上面,ajax提交数据时,遇到了两个问题,一个就是跨域,一个php程序总会被执行两次. 第一个问题的解决方法,是百度出来的,添加下面几行代码就可以了: header('Acc ...
- Run as ant build每次都执行两次
因为用了selenium+testng+ant的框架,所以每次执行自动化,我就run as ant build.发现测试每次都执行两次,很奇怪.因为也没有影响到测试结果,所以一开始也就let it g ...
- Run as ant build每次都执行两次-问题解决
在Eclipse里面,运行ant,整个测试流程总是执行两遍,其几天试了下在DOS命令行直接调用ant, 结果发现只执行了一次,并且内存消耗好像也没那么大了,估计是eclipse自己的问题.问题解决了, ...
随机推荐
- 运行该脚本出现/bin/sh^M: bad interpreter: No such file or directory
错误中脚本文件的一个非常可能的原因是DOS格的, 即每一行的行尾以\r\n来标识, 其ASCII码各自是0x0D, 0x0A. 能够有非常多种办法看这个文件是DOS格式的还是UNIX格式的, 还是M ...
- Matlab Tricks(二十三)—— 保存图像到 pdf
printme = @(txt) print('-dpdf', sprintf('figures/Example_%s',txt)); % 该匿名函数的接受的参数为字符串类型,也即欲保存的文件名: % ...
- Eucalyptus企业云计算(建立能够和Amazon EC2兼容的云)
Eucalyptus是与一个在加利福尼亚大学的研究性项目,创建了一个使企业能够使用它们内部IT资源(包括服务器.存储系统.网络设备)的开源界面,来建立能够和Amazon EC2兼容的云. “Eucal ...
- js table鼠标点击时变色
<head> <title></title> <script type="text/javascript"> ...
- vxworks下libpcap的移植
linux下的libpcap应用能够成熟的使用在第三方的应用中,但基于vxworks开发的项目中需要使用libpcap的部分功能则无相应的实现. 研究了下libpcap向vxworks的移植,并且小有 ...
- Inno Setup制作最简单的安装程序
目标就是[把exe程序放到制定目录,然后自动把工程需要的dll放到system32目录下,自动注册注册表.] 实现上述需求,用Inno Setup可以非常方便快捷实现. 安装Inno Setup. 点 ...
- Java8 的一些新特性总结
目前Java8已经发布很多个版本了,对于Java8中的新特性虽然有各位大神进行jdk8的英文特性文档翻译,但都太官方化语言,对照几篇翻译本人对新特性文档做一下总结,以帮助我和各位不了解Java8新特性 ...
- ML:多变量线性回归(Linear Regression with Multiple Variables)
引入额外标记 xj(i) 第i个训练样本的第j个特征 x(i) 第i个训练样本对应的列向量(column vector) m 训练样本的数量 n 样本特征的数量 假设函数(hypothesis fun ...
- QQ邮箱打败163邮箱的过程(重视用户体验的结果)
引用 楼主 CKAOS 的回复: 目前负责一个项目,ASP.NET的,做一个网盘系统,别的都弄好了,只差一个下载文件夹的功能未实现,只能在服务器端打包成压缩文件,再发回浏览器.如何直接下载文件夹,不是 ...
- qtchooser - a wrapper used to select between Qt development binary(2种方法)
---------------------------------------------------------------------------------------------------- ...