• spring task 定时任务执行两次


    项目部署到服务器上后碰到了定时任务执行2次的问题

    原因是一个tomcat配置了多个项目,需要更改tomcat的配置,否则会导致项目重复部署,从而导致定时任务执行多次

    tomcat部署server.xml详解

    转https://blog.csdn.net/wuqilianga/article/details/79153463

    终于搞懂了TOMCAT/config/server.xml里关于HOST和Context的问题了!!!!!

    起因是因为quartz定时器总是被执行2次,还是同一个线程,查了半天说是加载了两次,虽然改了下是成功了,但是还是有点不明所以!

    吃完午饭,无意中,把这个问题整明白了点!

    直接上例子:

    1.只有Host没有Context

    那么会部署tomcat/webapp下的所有项目(或者说文件夹:ROOT,PLAYER,项目1,项目2...)

    会直接带上文件夹名字作为属性,

    特别提示ROOT的优先级高,会省去ROOT这个名字

    即:

    localhost:8080/项目1/...

    localhost:8080/项目2/...

    localhost:8080/(ROOT)xxx

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false"></Host>

    2.指定了一个Context,path=""

    那么会将appBase与path拼接, docBase是你文件夹的名字,path是你的访问路径

    这里path="" 那么访问路径就是 ...(webapps)/方法...(localhost:8080/add)

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
    <Context path="" docBase="aaa" debug="0" reloadable="true"/>
    </Host>

    3.指定了一个Context,path="xxx"

    appBase+path拼接, docBase是你文件夹的名字,path是你的访问路径

    这里path="xxx" 那么访问路径就是 ...(webapps)/xxx/方法...(localhost:8080/xxxx/add)

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
    <Context path="" docBase="book" debug="0" reloadable="true"/>
    </Host>

    4.指定了多个Context,那就必须都配上path

    有多个context,就要配上多个path,这样才能根据不同的项目走不通的路径

    也就是说

    testa文件夹走的是localhost:8080/aaa/...

    testb文件夹走的是localost:8080/bbb/...

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false">
    <Context path="aaa" docBase="testa" debug="0" reloadable="true"/>
    <Context path="bbb" docBase="testb" debug="0" reloadable="true"/>
    </Host>

    注:

    autoDeploy="false" deployOnStartup="false"这两个选项都为true的时候(一般默认autoDeploy为true)

    这时候会自动加载/部署

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="ture" >
    <Context path="" docBase="aaa" debug="0" reloadable="true"/>
    </Host>

    我之前就是这样子配置,所以走了2遍

    第一遍:webapp下所有的文件夹部署(虽然我只有一个aaa文件夹)(localhost:8080/aaa/add...)

    第二遍:指定aaa文件夹又走了一遍,且path为空(localhost:8080/add...)

    这两个域名都能走!!!

    ==================================

    博主:http://blog.csdn.net/jibaole/article/details/52765249

    Tomcat中给server.xml加入<Context>元素

    <Context>代表了运行在<Host>上的单个Web应用,一个<Host>可以有多个< Context>元素,每个Web应用必须有唯一的URL路径,这个URL路径在<Context>中的属性

    path中设定。<Context>元素的属性: 

    path:指定访问该Web应用的URL入口,如:http://127.0.0.1:8080/helloApp1。 

    docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于<Host>的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。


    reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

    在开发阶段将reloadable属性设为true,有助于调试servlet和其它的class文件,但这样用加重服务器运行负荷,建议在Web应用的发布阶段将reloadable设为false。
    ---------------------

    纸上得来终觉浅,绝知此事要躬行。
  • 相关阅读:
    使用对象-关系映射持久化数据
    Spring中使用JDBC
    无法正确解析FreeMarker视图
    使用Java配置SpringMVC
    面向切面的Spring
    高级装配
    爬虫简介与request模块
    列表存储本质以及索引为什么从0开始
    列表和字典操作的时间复杂度
    记录腾讯云中矿机病毒处理过程(重装系统了fu*k)
  • 原文地址:https://www.cnblogs.com/chenglangpofeng/p/10643542.html
Copyright © 2020-2023  润新知