SpringBoot项目部署到Tomcat中运行

记录一下SpringBoot工程打包部署到Tomcat容器中运行的过程,(永远猜不到客户还会有哪些奇葩要求)

SpringBoot打war包

将springboot打包war包放入tomcat容器内运行

1.修改maven文件的打包方式

<packaging>war</packaging>

2.移除SpringBoot的内置tomcat

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

复习一下maven依赖的生命周期

  1. compile:编译依赖范围,默认的依赖范围,依赖在编译、测试、运行时三种 classpath 下都有效
  2. test:测试依赖范围,只有测试 classpath 有效
  3. provided:已提供依赖范围,对于编译和测试 classpath 有效,运行时 classpath 无效。例如 servlet-api,在编译和测试时需要用这个依赖,但在运行项目时的时候,由于容器已经提供了,就不需要 Maven 重复地引入。
  4. runtime:运行时依赖范围。测试、运行时 classpath 有效,编译时无效。例如jdbc驱动包,项目主代码的编译只需要JDK提供的JDBC接口,只有在执行测试或者运行项目的时候才需要实现上述接口的具体JDBC驱动。
  5. system:系统依赖范围,和 provided 依赖范围一致,但是使用 system 依赖时,必须通过 systemPath元素显示的指定依赖文件的路径。由于此类依赖不是通过 Maven 仓库解析的,而且往往与本机系统绑定,可能造成构建的不可移植,因此应该慎用。systemPath 元素可以引用环境变量。
  6. import:用于一个dependencyManagement对另一个dependencyManagement的继承。

3.修改启动类

@SpringBootApplication
// 继承 SpringBootServletInitializer 类
public class MapApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(MapApplication.class, args);
    }

    //重写configure方法
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(MapApplication.class);
    }
}

4.重新打包

mvn clean
mvn package

5.部署war包

移动target目录中的war包文件放入tomcat的wabapps文件夹中。

当然你也可以宝塔,随你便。

6.启动tomcat

观察tomcat日志,成功启动

image-20240805194218426

7.喝杯可乐庆祝一下🥤

[dog]