日期:2014-05-16  浏览次数:20728 次

linux下Quartz被调度2次问题

最近写了一些定时任务,由于任务比较多,采用了Quartz来实现,但是在windows环境下测试的时候一切正常,但是放到linux服务器上的时候就出现了2次任务调度的情况,一个任务被执行了2次,无赖中的时候在javaeye上居然发现了解决方案:http://www.javaeye.com/post/575262?page=1

当我们吧项目发布到tomcat下的时候,windows下的tomcat的config下的service.xml文件中有段内容如下:

<Host name="localhost"?appBase="webapps"
?????? unpackWARs="true" autoDeploy="true"
?????? xmlValidation="false" xmlNamespaceAware="false"></Host>

但是在linux下则不同

<Host name="localhost"?appBase="webapps"
?????? unpackWARs="true" autoDeploy="true"
?????? xmlValidation="false" xmlNamespaceAware="false">
?????????<Context path="" docBase="object1" /></Host>

解决方案是:把linux 下的appBase="webapps"修改为appBase=""

多出了一行 <Context path="" docBase="you object name" />,这两段的区别是第二段去除了appBase="webapps"中的webapps变成了appBase="",因为web应用程序都是放在webapps这个目录下的,如果不把“webapps“去掉,这里会调用一次quartz的任务调度,在接下来的“<Context path”中又会调用一次quartz的任务调度,所以就重复了2次

通过以上修改后变成:

<Host name="localhost"?appBase=""
?????? unpackWARs="true" autoDeploy="true"
?????? xmlValidation="false" xmlNamespaceAware="false">
?????????<Context path="" docBase="webapps/object1" /></Host>

这个时候tomcat默认路径http://localhost:8080/默认访问object工程,但是这个时候系统启动报错说找不到manmager和host-manager文件。于是有修改为以下2个Host:

<Host name="127.0.0.1"?appBase=""
?????? unpackWARs="true" autoDeploy="true"
?????? xmlValidation="false" xmlNamespaceAware="false">

<!--这个可以加访问路径别名/域名或本机IP-->

?????? <Alias>www.aaa.com</Alias>

??????? <Alias>www.bbb.com</Alias>

??????? <Alias>192.16.18.23</Alias>


?????????<Context