小小小小涛

Tomcat配置错误导致Quartz执行两次问题

以下基于tomcat服务器

我们通常将域名映射到指定服务器的端口上,以通过域名直接访问服务,如http://www.abc.com域名已绑定到本机的80端口,项目名wechat,则直接访问http://www.abc.com和访问http://localhost:80/wechat的效果是一样的,面向用户的话非常推荐前者,因为用户通常不关注你的端口和项目名称这些东西,况且他们也不知道。这种配置只需要在tomcat的配置文件server.xml中的<Host>标签中加一项配置<Context docBase="wechat" path="" reloadable="false"/>即可,其中docBase可为基于<Host>的appBase
属性的相对路径,也可填写绝对路径。这样启动服务即可不带项目名称访问服务。以下是我在项目中的配置

<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="wechat" path="" reloadable="false"/> </Host>

但是本人最近遇到了一些问题,这样配置之后,启动服务,总是发现Quartz执行了两次,仔细观察发现webapps目录下除了解压出的wechat文件夹之外,还有一个ROOT文件夹,内容与wechat文件夹一样。查资料都说是tomcat配置有问题,

<Host>的autoDeploy="true"会部署一次服务,<Context docBase="wechat" path="" reloadable="false"/>又会部署一次,导致tomcat容器两次加载项目,tomcat容器存在两个bean,每个bean都去执行定时任务,所以造成任务重复执行问题,

于是将<Host>(<Context>不变)标签的配置修改为

<Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false" deployOnStartup="false">

 autoDeploy设为false,新增deployOnStartup="false"属性(注意大小写哦,区分大小写的,本人的编辑模式插入的代码区是有大小写区分的,貌似浏览模式看到的都是小写,怕写错的话可以去官方文档查看http://tomcat.apache.org/tomcat-5.5-doc/config/host.html),<Host>不自动部署且启动时也不部署,<Context>部署一次,Quartz任务不会出现重复执行的问题。

posted on 2016-11-02 20:17  小小小小涛  阅读(1466)  评论(0编辑  收藏  举报

导航