为什么Springboot项目中有些写法继承了SpringBootServletInitializer类?Springboot的两种发布方式

一、前言

在一次SpringBoot源码中看到了启动类中继承了SpringBootServletInitializer,代码如下,不明白为什么要这样写,特此整理本篇文章讲解为什么有些项目中继承了SpringBootServletInitializer类。

继承SpringBootServletInitializer代码如下:

@SpringBootApplication
public class AdminApplication  extends SpringBootServletInitializer {
    
    
    public static void main(String[] args){
    
    
        SpringApplication.run(AdminApplication.class, args);
    }


    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application){
    
    
        return application.sources(AdminApplication.class);
    }
}

不继承SpringBootServletInitializer启动类代码如下:

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

原因:
其实这是跟Springboot项目的发布方式有关,我们知道Springboot是内置了Tomcat容器的,所以一般服务器上不需要额外安装Tomcat程序,但是如果要使用外置的Tomcat容器则需要继承SpringBootServletInitializer并重写 configure() 方法

二、SpringBoot的两种发布方式

Spring Boot 项目的发布方式有两种:

  • 内置容器运行
  • 外置容器(Tomcat)运行

2.1、内置容器运行

1)打包应用
使用窗口命令,在 pom.xml 同级目录下:

mvn clean package -Dmaven.test.skip=true

Dmaven.test.skip=true 表示不执行测试用例,也不编译测试用例类。

2)启动应用
后台启动 Java 程序, 命令如下:

nohup java -jar springboot-0.0.1-SNAPSHOT.jar &

3)停止程序
首先查询 Java 程序的 pid

ps -ef|grep java

再停止程序

kill -9 pid

操作如下图所示:
在这里插入图片描述

2.2、外置容器(Tomcat)运行

1)排除内置 Tomcat

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

将 scope 属性设置为 provided,表示打包不会包含此依赖。

2)配置启动类
在项目的启动类中继承 Spring BootServletInitializer 并重写 configure() 方法:

@SpringBootApplication
public class AdminApplication extends SpringBootServletInitializer {
    
    
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
    
    
        return application.sources(AdminApplication.class);
    }
    
    public static void main(String[] args) {
    
    
        SpringApplication.run(AdminApplication.class, args);
    }
}

3)打包应用
使用窗口命令,在 pom.xml 同级目录下:

mvn clean package -Dmaven.test.skip=true

4)部署应用
打包完成会在 target 目录下生成:项目名 + 版本号.war 文件,复制到 Tomcat 的 webapps 目录下,运行 Tomcat 即可。

三、扩展

3.1、如何将 Spring Boot 项目打包成 war 包?

在 pom.xml 里设置

<packaging>war</packaging>

猜你喜欢

转载自blog.csdn.net/weixin_49114503/article/details/134401930
今日推荐