Spring定时任务Scheduled在linux tomcat服务器上总是执行两次(tomcat配置)

Spring定时任务Scheduled在linux tomcat服务器上总是执行两次。

在使用Spring定时任务Scheduled的时候,在本地Windows系统上,执行正常,但是在Linux生产环境上,总是启动两次,除了借助于redis以及线程安全来处理,使其只能执行一次意外,发现原因是tomcat的配置问题。

 

Tomcat server.xml配置


 

  

  

  

  

  

  

  

  

    

  

 

  

 

    

 

    

 

    

    

 

    

    

 

    

    

 

      

      

        

      

 

      

        

        

      

    

  


 

特别注意Host这部分配置

Host可以理解为虚拟主机,对一个Tomcat,可以配置多台虚拟主机。简单地说,就是让一台服务器可以对应多个主机名。要求每个Host的Name必须唯一。但是只建议一个Tomcat只配置一个Host。
					

Host的常用属性:

Name:主机名,如localhost,test.com等

appBase: 此Host的webapps目录,即存放非归档的web应用程序的目录或归档后的WAR文件的目录路径,默认是tomcat的webapps
					

autoDeploy:true,Tomcat处于运行状态时放置于appBase目录中的应用程序文件是否自动进行deploy;默认为true;
					

unpackWARs: 是否自动解压war包;默认为true;

 

context类似于apache中的路径别名,一个Context定义用于标识tomcat实例中的一个Web应用程序配置上下文,也就是对应主机下的具体子项目。

context的常用属性:

docBase: 相应的Web应用程序的存放位置;也可以使用相对路径,起始路径为此Context所属Host中appBase定义的路径;

path: 相对于Web服务器根路径而言的URI;如果为空"",则表示为此webapp的根路径;

reloadable: 是否允许重新加载此context相关的Web应用程序的类;默认为false;

 

特別注意这里的host和context配置,当未给Host配置Context时,Tomcat默认把ROOT项目作为Root Context,即此时访问 http://localhost:8080 就是访问ROOT项目,当给Host配置Context时,如果path="" 或 path="/",则相当于将此Context指定为Root Context,此时访问 http://localhost:8080 就是访问ROOT项目,如果在配置Context时,指定了path="" 或 path="/",同时又指定了docBase="test",则此时,在tomcat的webapps下会生成ROOT项目,并且在tomcat指定的appBase的路径下,生成一个同docBase相同名称的项目,这里就是test。此时,在tomcat里,就有了两个项目,启动tomcat,就相当于启动了两个端口相同的项目,如果使用了定时任务,则会同时执行两次。

webapps下的ROOT是tomcat的应用程序的根,如果应用程序部署在ROOT中,则可直接通过http://ip:port 访问到
					

 

 

 

 


				
 

你可能感兴趣的:(Spring定时任务Scheduled在linux tomcat服务器上总是执行两次(tomcat配置))