Java 为什么在将“SpringBootServletInitializer”部署到外部tomcat时需要扩展它

Java 为什么在将“SpringBootServletInitializer”部署到外部tomcat时需要扩展它,java,tomcat,spring-boot,deployment,Java,Tomcat,Spring Boot,Deployment,为什么我们要扩展SpringBootServletInitializer,以便将SpringBoot应用程序运行到外部tomcat 如果没有扩展SpringBootServletializer它在嵌入式tomcat上运行,那么为什么在将它部署到外部tomcat时需要扩展SpringBootServletializer?旧的Servlet容器不支持Servlet3.0中使用的ServletContextInitializer引导过程。您仍然可以在这些容器中使用Spring和Spring Boot,

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


如果没有扩展SpringBootServletializer它在嵌入式tomcat上运行,那么为什么在将它部署到外部tomcat时需要扩展SpringBootServletializer?

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

为了创建可部署的war文件,需要提供SpringBootServletilizer子类并重写其配置方法。这利用了Spring框架的Servlet3.0支持,并允许您在Servlet容器启动应用程序时对其进行配置。通常,您会更新应用程序的主类以扩展SpringBootServletilizer

你可以参考下面的链接


以下是一些详细信息:

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

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

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

正如SpringBoot建议的那样,在
xml配置上使用
JavaConfiguration

它使用JavaConfiguration而不是
web.xml


它有
SpringBootServletInitializer
类,该类最终实现
WebApplicationInitializer
接口,并在启动时覆盖它的
来配置东西

一个问题。。为什么我们需要此功能保护的SpringApplicationBuilder配置(SpringApplicationBuilder应用程序)?没有此功能,我的应用程序运行正常。
@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);
    }
}