zoukankan      html  css  js  c++  java
  • springboot 定时任务部署至linux服务器上后会执行两次问题

    springboot定时任务在本地运行时,正常执行且只执行一次,但是在maven打包成war包,部署至linux服务器上之后,定时任务奇怪的执行了两次。

    由于未做负载均衡,所以可以先排除是因为多台服务器都运行此代码导致。

    参考了网上的一些资料后了解到,是因为定时任务被实例化了两次的缘故,这个现象归根到底问题出在tomcat的service.xml的配置上。

    在service.xml中知道如下代码:

    <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">  
      
     <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
                prefix="localhost_access_log" suffix=".txt"  
                pattern="%h %l %u %t "%r" %s %b" />  
    <Context docBase="emall" path="/" reloadable="true" />  
    </Host>  

    由于配置了appBase="webapps"和docBase="emall",原因是tomcat加载完appBase="webapps"之后又去加载docBase,因此造成加载两次项目的问题。

    解决办法:

    将 appBase="webapps"改成appBase="",将docBase="emall" 改成项目的绝对路径docBase="/usr/local/src/tomcat-emall/webapps/emall" ,这样,在tomcat启动后只会去加载一次docBase,重启tomcat,问题解决!!

    参考:https://blog.csdn.net/yaobengen/article/details/70312663

    后来发现了因为这样的配置出现的一下现象:

    如果在webapps文件夹中没有emall项目文件夹(非压缩包),则在启动服务的时候会在tomcat根目录下生成一个ROOT的文件夹,里面则是emall项目的源文件。

    如果在webapps文件夹下已经存在emall项目文件夹,则在启动服务的时候不会生成上述的ROOT文件夹,项目的源文件会在此emall文件夹下。

    关于appBase与docBase的区别与联系,可以参考https://blog.csdn.net/chenxiaodan_danny/article/details/45397765

  • 相关阅读:
    [NOI2007]生成树计数
    [NOI2009]变换序列
    BZOJ3261 最大异或和
    [SHOI2011]双倍回文
    [TopCoder14647]HiddenRabbits
    [HDU5709]Claris Loves Painting
    [BZOJ4559][JLOI2016]成绩比较
    [CF995F]Cowmpany Cowmpensation
    [TopCoder11557]MatrixPower
    [UOJ198][CTSC2016]时空旅行
  • 原文地址:https://www.cnblogs.com/conswin/p/8855581.html
Copyright © 2011-2022 走看看