转载

springboot项目部署到tomcat步骤以及常见问题

------------恢复内容开始------------

本文分为两个部分,一,是打包的步骤,二,是我项目中所遇到的问题以及解决方法

一. 打包为war包步骤

1.修改打包方式为war

在pom.xml文件中将打包格式修改为war格式

 <packaging>war</packaging>

2.移除springboot自带的tomcat插件

在pom.xml里找到 spring-boot-starter-web 依赖节点,将其中包含的tocat去除

  <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>

3. 添加servlet-api的依赖

以下两种依赖随意添加一个

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>8.0.36</version>
    <scope>provided</scope>
</dependency>

4. 修改启动类,并且重写初始化方法

springboot项目一般都有一个启动类来启动项目,而部署到tomcat不能通过该方式启动,所以需要改变启动方式,在启动类的同级包下添加一个初始化类,并且继承 SpringBootServletInitializer

如下:

public class ServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        // 注意这里要指向用main方法执行的Application启动类
        return builder.sources(VpnManagementSystemApplication.class);

    }
}

接下来就可以打包成war包部署了,打开命令窗口,选择powershell命令,然后在命令行里输入: mvn clean package 即可,然后去项目的目录下的target下就可以看到已经打包好的war包。

二.  常见问题

springboot项目在idea中放在tomcat中也是可以运行的,idea中配置一个tomcat来运行项目,最好和服务器版本一样,测试环境和开发环境一样才好寻找问题解决问题,以下问题都是我遇到的,以及有效的解决方法,可能

对于你的项目来说没用,欢迎讨论。

1.jar包冲突问题

在springboot项目的项目中需要手动添加的一些包可能tomcat已经存在,这时就需要删除这些包,否则就会报错,甚至项目直接启动不起来比如在springboot项目下用jsp页面,这时需要添加的依赖包在

tomcat已经存在,就会报错,如下包

<dependency>
     <groupId>org.apache.tomcat.embed</groupId>
     <artifactId>tomcat-embed-jasper</artifactId>
</dependency>-->

所以在部署到tomcat报错时,一定要考虑依赖冲突问题。

2.使用pagehelper时,springboot方式启动时正常,放到tomcat出现:“在系统中发现了多个分页插件,请检查系统配置!” 问题

该问题出现的原因在于maven的pagehelper-spring-boot-starter这个依赖,提供了自动配置分页插件的功能,而我们还添加了如下依赖,所以就报错,但是不添加如下依赖项目就直接找不到包,

<dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.12</version>
</dependency>

通过在springboot启动类加上如下注解去掉自动配置解决

@SpringBootApplication(exclude = PageHelperAutoConfiguration.class)

3,当你在idea的tomcat启动正常,但是手动将war包放入tomcat放入webapp目录时启动一直报错

该问题也就是,将2个项目部署到tomcat,第一个启动正常,后面一个就报错,而只启动其中任意一个项目都不会报错

在2个项目的配置文件application.yml中,各加入spring.jmx.default-domain = 项目名1,spring.jmx.default-domain = 项目名2 , 再次打成war,并都部署到同一个tomcat的webapps下,

启动正常!

这是本人的第一篇博客,遇到的问题都是我自己遇到并且实测有用的方法,欢迎讨论。本文方法借鉴于如下几个链接,当你还有问题时不妨查看如下链接试试:

https://blog.csdn.net/wang__dream/article/details/80372025

https://blog.csdn.net/qq_34381084/article/details/81485319

https://www.cnblogs.com/jpfss/p/9723828.html

https://www.jianshu.com/p/18ae492099ca

原文  https://www.maiyewang.com/archives/94474
正文到此结束
Loading...