1. 概述
在本教程中,我們將快速介紹 SpringBootServletInitializer。
它是一個 WebApplicationInitializer 的擴展,可以從傳統的 WAR 歸檔中運行 SpringApplication,並部署在 Web 容器上。該類將應用程序上下文中的 Servlet、Filter 和 ServletContextInitializer bean 綁定到服務器。
擴展 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() 方法中,以便嵌入式容器也能將其拾取。