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

SpringBootServletInitializer是用于配置Servlet初始化的类,实现WebApplicationInitializer接口,使得SpringBoot应用能以WAR包形式部署在外部Servlet容器如Tomcat中。部署包括修改POM文件为war打包,排除或指定Tomcat依赖,创建启动类并重写configure方法,打包成WAR,最后在TOMCAT的webapps目录下启动。文章还提到了控制台乱码的解决方法,即修改logging.properties文件编码为GBK。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

写在前面

请先阅读:
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包

使用常规方式打包
在这里插入图片描述

5. 部署

将WAR包复制到webapps目录下,然后启动TOMCAT
在这里插入图片描述

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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cloneme01

谢谢您的支持与鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值