为啥在部署到外部tomcat时需要扩展SpringBootServletInitializer

Posted

技术标签:

【中文标题】为啥在部署到外部tomcat时需要扩展SpringBootServletInitializer【英文标题】:Why it is necessary to extend`SpringBootServletInitializer` while deploying it to an external tomcat为什么在部署到外部tomcat时需要扩展SpringBootServletInitializer 【发布时间】:2018-06-11 09:19:04 【问题描述】:

为什么我们应该扩展SpringBootServletInitializer 以便将SpringBoot 应用程序运行到外部tomcat

如果不扩展SpringBootServletInitializer 它在嵌入式tomcat 上运行,那么为什么在将其部署到外部tomcat 时需要扩展SpringBootServletInitializer

【问题讨论】:

【参考方案1】:

较旧的 Servlet 容器不支持 Servlet 3.0 中使用的 ServletContextInitializer 引导过程。您仍然可以在这些容器中使用 Spring 和 Spring Boot,但您需要将 web.xml 添加到您的应用程序并配置它以通过 DispatcherServlet 加载 ApplicationContext .

为了创建可部署的war文件,需要提供一个SpringBootServletInitializer子类并覆盖它的configure方法。这利用了 Spring Framework 的 Servlet 3.0 支持,并允许您在应用程序由 servlet 容器启动时对其进行配置。通常,您更新应用程序的主类以扩展 SpringBootServletInitializer

@SpringBootApplication
public class Application extends SpringBootServletInitializer 
@Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) 
        return application.sources(Application.class);
    

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

您可以参考以下链接

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

【讨论】:

一个问题.. 为什么我们需要这个功能受保护的 SpringApplicationBuilder 配置(SpringApplicationBuilder 应用程序)?没有这个功能,我的应用程序运行得很好。【参考方案2】:

这里有更多信息:

为了部署基于Servlet 的Web 应用程序(如Spring),您实际上需要提供传统的web.xml

我们也可以使用WebApplicationInitializer 接口以编程方式做同样的事情。根据文档

要在 Servlet 3.0+ 环境中实现的接口,以便 以编程方式配置 ServletContext - 而不是(或 可能与)传统的基于 web.xml 的方法结合使用。

正如 SpringBoot 建议使用 JavaConfiguration 而不是 xml configuration

它使用 JavaConfiguration 而不是 web.xml

它有SpringBootServletInitializer 类,最终实现WebApplicationInitializer 接口并覆盖其onStartup 来配置事物。

【讨论】:

以上是关于为啥在部署到外部tomcat时需要扩展SpringBootServletInitializer的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot在部署到Tomcat期间无法加载外部jar

SpringBoot项目部署到外部Tomcat的相关配置

Spring Boot:部署到外部服务器时如何设置异步超时

Spring BootSpring Boot项目部署到外部Tomcat容器

springboot项目怎么部署到外部tomcat

Spring boot 1.4登录外部tomcat