为什么有必要扩展“SpringBootServletInitializer”,同时将其部署到外部tomcat

2022-09-02 10:03:41

我们为什么要扩展才能将应用程序运行到外部?SpringBootServletInitializerSpringBoottomcat

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


答案 1

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

为了创建可部署的 war 文件,需要提供一个 SpringBootServletInitializer 子类并覆盖其配置方法。这利用了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


答案 2

以下是一些更多信息:

为了部署一个基于Web的应用程序(如),你实际上需要提供传统的.ServletSpringweb.xml

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

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

正如SpringBoot建议使用.JavaConfigurationxml configuration

它使用 JavaConfiguration 而不是 .web.xml

它有一个类,它最终实现接口并覆盖它来配置事物。SpringBootServletInitializerWebApplicationInitializeronStartup


推荐