zoukankan      html  css  js  c++  java
  • spring定时任务执行两次 项目重复初始化 项目启动两次

    tomcat/config/server.xml中Host标签Context节点的问题

    项目里quartz定时器总是被执行2次,通过打印发现原来项目被加载了两次,所以项目下的Listener被重复加载了

    server.xml是这样的

    appBase是指定虚拟主机的目录,可以指定绝对目录,也可以指定相对于的相对目录.如果没有此项,默认为/webapps。 

    appBase的两个作用:

    1. 这个目录下面的子目录将自动被部署为应用。
    2. 这个目录下面的.war文件将被自动解压缩并部署为应用

    docBase是指定Web应用的文件路径.可以给定绝对路径,也可以给定相对于Host的appBase属性的相对路径. 如果Web应用采用开放目录结构,那就指定Web应用的根目录;如果Web应用是个WAR文件,那就指定WAR文件的路径。

    path是访问docBase所在项目的访问路径,如果path为“”值,则浏览器地址栏输入tomcat所在的IP:端口,就可访问到docBase所在的项目。

     docBase是你文件夹的名字(也就是项目名),path是你的访问路径,appBase+path拼接来访问

    出现上述问题的原因是tomcat加载完appBase=”webapps”之后又去加载docBase(不清楚先加载哪个),因此造成加载两次项目的问题。

    解决方法一:将Host下的Context注释掉。推荐这种方法

      

      网上的说法如下:

                   

     

    缺点是,IP端口后面需要加上项目名,才可以访问到项目

    解决方法二:appBase为空或者为随意设置的一个空文件夹(可能需要新建该文件夹)

    缺点是,如果部署的是war包,war包将不会被自动解压。

    解决方法三:appBase为空

     

    缺点是,如果部署的是war包,war包将不会被自动解压。

    解决方法四:Context中的path不为空也不为“/”,path的值为“/”+项目名(不知道为什么这样不会重复加载)

    缺点和方法一一样。

    会出现重复加载的情况:

    第一种:appBase=“webapps”,path=“”

    第二种:appBase="webapps",path="/"

     

     综上,推荐方法一,将Context部分注释掉

     参考文献:

    http://blog.csdn.net/tuntun1120/article/details/64126278

    http://blog.csdn.net/u012554102/article/details/50409452

    http://www.iteye.com/problems/94122

    http://nkliuliu.iteye.com/blog/816335

  • 相关阅读:
    [转]给定单链表,检测是否有环。如果有环,则求出进入环的第一个节点
    二叉树的后序遍历
    求二叉树叶子节点的个数
    随笔
    两个免费转换视频的软件,实现服务器端Video2FLV
    自制Flash FLV视频播放器
    Flash取得外部WEB参数的方法
    [转]javascript小技巧,超强推荐
    c#设计模式(转)
    ffmpeg和Mencoder使用实例小全
  • 原文地址:https://www.cnblogs.com/Syney/p/7678714.html
Copyright © 2011-2022 走看看