SpringBoot - 如何使用SpringBootServletInitializer将SpringBoot项目打成WAR包并部署TOMCAT中

写在前面

请先阅读:
MAVEN的SCOPE属性详细说明:https://blog.csdn.net/goodjava2007/article/details/122860143

SpringBootServletInitializer的作用

SpringBootServletInitializer 是一个 SpringBoot 提供的、用于配置SERVLET初始化的类,它实现了WebApplicationInitializer 接口,因此可以在SERVLET容器启动时被自动加载,并生成一个SERVLET容器的配置类,用来初始化SERVLET容器。
一句话:SpringBootServletInitializer让SpringBoot将应用程序以 WAR 包的形式部署在外部的SERVLET容器中(如 Tomcat、Jetty、Undertow等),并提供一种简单的配置外部SERVLET容器的方法。

如何使用

public class ServicexAdminServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ServicexAdminApplication.class);
    }
}

部署步骤

1. 修改POM文件
<artifactId>servicex-admin-api</artifactId>
<packaging>war</packaging>
<description>WEB服务主入口模块</description>
2. 排除WEB容器(不排除内置的TOMCAT也没有问题)
<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>

或者,使用下面的方式也可以

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
3. 注册启动类

新建一个启动类,继承自SpringBootServletInitializer,重新configure()方法

public class ServicexAdminServletInitializer extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ServicexAdminApplication.class);
    }
}

或者,使用下面的方式也可以

/**
 * 主启动入口
 */
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
public class ServicexAdminApplication  extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ServicexAdminApplication.class);
    }
    
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(ServicexAdminApplication.class, args);
        String[] beans = context.getBeanDefinitionNames();
        // 下面仅仅用于将容器中BEAN进行打印
        Arrays.stream(beans).sorted().forEach(System.out::println);
        System.out.println("管理端的服务启动成功...");
    }
}
4. 生成WAR包

使用常规方式打包
SpringBoot - 如何使用SpringBootServletInitializer将SpringBoot项目打成WAR包并部署TOMCAT中_第1张图片

5. 部署

将WAR包复制到webapps目录下,然后启动TOMCAT
SpringBoot - 如何使用SpringBootServletInitializer将SpringBoot项目打成WAR包并部署TOMCAT中_第2张图片

6. 控制台乱码
# 将"conf/logging.properties"文件中的内容进行修改,修改为GBK,如下:

java.util.logging.ConsoleHandler.level = FINE
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter
java.util.logging.ConsoleHandler.encoding = GBK

SpringBoot - 如何使用SpringBootServletInitializer将SpringBoot项目打成WAR包并部署TOMCAT中_第3张图片

你可能感兴趣的:(SpringBoot,spring,boot,tomcat)