zoukankan      html  css  js  c++  java
  • 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内配置虚拟路径,来映射到实际项目。比如这样:

    1 <Host .......>
    2     <Context path="/student" docBase="D:apache-tomcatwebappsstudent-web"  reloadable="true"/>
    3 </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属性指定的还是项目名称,等于没配置。如下:

    1 <Host .......>
    2     <Context path="/student-web" docBase="D:apache-tomcatwebappsstudent-web"  reloadable="true"/>
    3 </Host>

    若是配置<Context>标签的path属性“/非项目名称” 且 docBase属性指向webapps目录,那项目肯定会被容器实例化两遍!如下:

    1 <Host .......>
    2     <Context path="/student" docBase="D:apache-tomcatwebappsstudent-web"  reloadable="true"/>
    3 </Host>

    至于选择哪种解决方案,根据实际情况定,那我这里只能选择第2种。

    0x004: 声明

    导致Quartz调度任务被执行两次的原因有很多,以上列举的2种解决方案 可能 并 不适合你。亦可从其他方向查找原因。
    比如,检查Quartz的xml配置文件被加载了2次等等。

    0x005: 完结
    分享是技术进步的源泉,作者能力有限,如有错误,欢迎指出,不吝赐教。

     

  • 相关阅读:
    element-ui日期筛选:选择日期即触发查询
    js点击按钮复制内容到粘贴板
    axios配置及使用(发起请求时带上token)
    axios + vue导出excel文件
    textarea与标签组合,点击标签填入标签内容,再次点击删除内容(vue)
    vue复制textarea文本域内容到粘贴板
    ElementUI动态表格数据转换formatter
    elementUI图片墙上传
    高德地图模糊搜索地址(elementUI)
    elementUI表单验证
  • 原文地址:https://www.cnblogs.com/zhifa/p/10932924.html
Copyright © 2011-2022 走看看