zoukankan      html  css  js  c++  java
  • SpringBoot项目部署到外部Tomcat重复启动的解决方法

    以war包形式部署到外部Tomcat

    1、未排除SpringBoot内嵌的Tomcat

    // 项目为war形式
    <packaging>war</packaging>  
    
    <dependency>    
      <groupId>org.springframework.boot</groupId>    
      <artifactId>spring-boot-starter-web</artifactId>    
      <!-- 去除内嵌tomcat -->    
      <exclusions>    
        <exclusion>    
          <groupId>org.springframework.boot</groupId>    
          <artifactId>spring-boot-starter-tomcat</artifactId>    
        </exclusion>    
      </exclusions>    
    </dependency>    
    <!--添加servlet的依赖-->    
    <dependency>    
      <groupId>javax.servlet</groupId>    
      <artifactId>javax.servlet-api</artifactId>    
      <version>3.1.0</version>    
      <scope>provided</scope>    
    </dependency>

    Tomcat配置的原因

    在Tomcat的默认的server.xml里面,错误的配置了Host或者Context标签

    例如下面的配置就会导致Tomcat重复加载项目:

    问题发生的原因:

    根据server.xml里配置的,Tomcat首先根据Context的配置内容生成第一个StandardContext对象,加载一次项目。然后再根据Host/appBase的配置对webapps下面的项目(web-sys)生成第二个StandardContext,再加载一次项目。Tomcat针对同一项目生成两个StandardContext的原因就是因为他们的名字不同,Tomcat认为是两个Context,所以加载了两次。而他们的名字是谁决定的呢?第一个StandardContext的名字是由标签:Context的配置来决定的,而第二个StandardContext的名字是由项目名称(siyunlian-master)决定的。

    解决办法:

    其实server.xml的Context标签有一个隐藏属性:name,只需要把此name设置为项目名称就可避免重复加载的问题。

    注意:在server.xml里有默认的Host(localhost)的配置,这个配置里会加载Tomcat的一些默认项目。如果想保留这个配置,又想为自己的项目配置域名,那么就必须新增一个host,并且appBase不能设置为:webapps(可以新建一个同级目录的文件夹用来存放项目,例如上面配置的appBase=“mywebapps”)。

    作者:Kaspar_Choo
             
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    Oracle報錯︰ORA-12638 證明資料擷取失敗
    tomcat启动startup.bat一闪而过[转]
    供应商术语
    如何在本地设置www.xxx.com,使其允许访问
    windows 安装包位置
    Windows Mobile系列学习四:Windows Mobile如何进行打包、设置打包显示图标
    Windows Mobile系列学习二:Windows Mobile 模拟器如何设置网络连线
    Windows Mobile的程式安装的手持机上如何设置开机自动启动功能?
    Java篇:树和Map
    JAVA篇:Java 多线程 (八)多线程下其他组件
  • 原文地址:https://www.cnblogs.com/kaspar/p/14484885.html
Copyright © 2011-2022 走看看