Spring Boot 提供了内置的 tomcat、undertow、jetty 三种 Servlet Web 容器。让我们开箱即用,可以迅速以 JAR 启动一个 Web 应用。但是在某些场景中我们可能还需要将我们的 Spring Boot 容器以 War 的形式进行传统的部署。这时我们就需要通过借助于 SpringBootServletInitializer 来实现。
SpringBootServletInitializer
SpringBootServletInitializer 是 WebApplicationInitializer 的实现,它从部署在 Web 容器上的传统 WAR 包运行 Spring Boot 应用。该类将 Servlet,Filter 和 ServletContextInitializer Bean 从应用程序上下文绑定到服务器。SpringBootServletInitializer 类还允许我们通过覆盖 SpringApplicationBuilder configure(SpringApplicationBuilder application)方法来配置由 Servlet 容器运行的应用程序。
package cn.felord.war;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
* @author Felordcn
*/
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(WarSpringBootApplication.class);
}
}
其中 WarSpringBootApplication 是 Spring Boot 的入口类,跟原来没什么两样
SpringApplicationBuilder
SpringApplicationBuilder允许您将多个方法调用链接在一起,并包含父方法和子方法,这些方法允许您创建层次结构,如下面的示例所示:
new SpringApplicationBuilder()
.sources(Parent.class)
.child(Application.class)
.bannerMode(Banner.Mode.OFF)
.run(args);
网友评论