1. 概述
本文将快速介绍 SpringBootServletInitializer 的核心概念。
这个类是 WebApplicationInitializer
的扩展,专门用于在传统 WAR 部署模式下运行 Spring Boot 应用。它负责将应用上下文中的 Servlet
、Filter
和 ServletContextInitializer
绑定到服务器。
通过继承 SpringBootServletInitializer
,我们还能在 Servlet 容器启动时自定义应用配置——只需重写 configure()
方法即可。
2. SpringBootServletInitializer 实战
来看一个实际案例:主类继承 Initializer
的典型写法。
我们的 @SpringBootApplication
类 WarInitializerApplication
做了三件事:
- 继承
SpringBootServletInitializer
- 重写
configure()
方法 - 通过
SpringApplicationBuilder
注册自身为配置类
@SpringBootApplication
public class WarInitializerApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(
SpringApplicationBuilder builder) {
return builder.sources(WarInitializerApplication.class);
}
public static void main(String[] args) {
SpringApplication sa = new SpringApplication(
WarInitializerApplication.class);
sa.run(args);
}
@RestController
public static class WarInitializerController {
@GetMapping("/")
public String handler() {
// ...
}
}
}
✅ 关键点:
- 当打包成 WAR 时,可直接部署到任意 Web 容器,
configure()
中的逻辑会自动执行 - 若打包成 JAR,需在
main()
方法中补充相同逻辑,确保嵌入式容器能正确加载
⚠️ 踩坑提示:忘记在 main()
方法中补充配置会导致 JAR 模式启动异常
3. 总结
本文介绍了 SpringBootServletInitializer
的核心作用,并演示了如何通过它实现传统 WAR 部署。这种方案特别适合需要兼容遗留容器(如 Tomcat 7)的场景。
完整示例代码可在 GitHub 获取(Maven 项目,开箱即用)。