Tomcat启动两次的问题

这是一个很有意思的问题困扰了一段时间,当我开发的一个系统使用了Quartz任务调度模块进行定时任务,在本机下运行没有问题。当部署到正式机上时,发现数据出现了不按期望的值的结果。原因就是任务执行了两次第二次把第一次的任务结果给修改了。关键是如何产生的这种情况。Google了一番,大家说到的原因主要是因为Tomcat下虚拟主机的配置造成的,比如我的域名叫作www.abc.com,那么默认的虚拟主机配置就是在server.xml文件下添加如下配置信息:

 

<Host name="www.abc.com"  appBase="webapps"
            unpackWARs="true"
            xmlValidation="false" xmlNamespaceAware="false">
   <Context path="" docBase="." reloadable="true" crossContext="true"/>
      </Host>

注意系统中原来默认配置主Host name=locahost也有一项其appBase也是webapps,问题就出在这里,每次Tomcat启动后,系统加载了name为localhost和www.abc.com的应用中的任务监听器各一次,这样肯定导致有两个任务管理器实例在运行,从而导致到点执行时会出现两个(如果虚拟主机多会产生多个)同时执行的任务。从而产生不良后果。

 

修改之后

<Host name="www.abc.com"  appBase=""
            unpackWARs="true"
            xmlValidation="false" xmlNamespaceAware="false">
   <Context path="/" docBase="app2/abc" reloadable="true" crossContext="true"/>
      </Host>

 

注意,这里将appBase置空,而使用docBase来设置应用路径,当然也可以用appBase="app2/abc",docBase="."来写。需要注意的是app2是建立在tomcat目录下,与webapps平级的一个文件夹。将应用abc目录发布到这里即可。

path属性,是用来指定访问该应用的路径名的。如果留空,则当输入http://www.abc.com:8080/就自动访问到了abc目录下的应用,当指定path="/abc"时,需要输入http://www.abc.com:8080/abc/才能够访问abc下的目录。

 

简单和同事研究试验了一番,粗浅的结论。需要以后不断细化深入了解Tomcat的配置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值