您的位置:首页 > 编程语言 > Java开发

SSH:解决Spring整合quartz定时任务执行两次问题

2017-06-08 13:24 1371 查看

一.问题描述:

开发环境是Windows,测试环境是Linux,正式环境是Linux。

同样的代码,定时任务在在开发环境、测试环境中测试的定时任务只执行一次,而在正式环境执行2次。

各环境不同的是数据库的连接,以及正式环境的域名配置。

因为所开发项目图片等一些目录路径问题,所以在生产环境上配置了Tomcat/conf/server.xml  <Context

数据库不会影响定时任务执行2次,因此影响定时任务执行两次的只能是添加的<Context

二.解决方法:

五种解决办法:

1.将<Host/>里面的改成 autoDeploy="false" deployOnStartup="false" 这样就可以避免tomcat服务器中自启动导致quartz定时任务被触发两次。(当然还可以按需求修
改,毕竟每个项目的需求都不尽相同)如:<Host appBase="webapps" autoDeploy="false" deployOnStartup="false" name="localhost" unpackWARs="true">

(1)autodeploy属性值设置为false,如果此项为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,如果有新web应用加入进来,会自动发布这个WEB应用,设成false就不会。

(2)增加deployOnStartup="false",表示Tomcat服务器启动时,不会自动发布appBase目录下所有的Web应用

2.如果项目tomcat下只有一个项目的话可以推荐用方法1;但是因为我的tomcat下有其他的项目,所以以上两个没用;【推荐】

quartz写在applicationContext.xml中,解决方法为将quartz的配置单独写个配置文件applicationContext-quartz;然后在web.xml中

 <context-param>

        <param-name>contextConfigLocation</param-name>

        <param-value>classpath:applicationContext.xml,classpath:applicationContext-quartz.xl</param-value>

    </context-param>

 
3.将路径已出webapp目录,在docBase中指定路径(可以是相对于webapp的路径,或者绝对路径)【推荐】

4.替换ROOT目录【推荐】--当tomcat下就一个项目时推荐

5.在conf/Catalina/localhost生成ROOT.xml,并加入如下内容:

1 <?xml version='1.0' encoding='utf-8'?>
2 <Context docBase="xxx" path="" reloadable="true" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring quartz ssh linux
相关文章推荐