springboot之SpringBootServletInitializer
1
概述
对于Spring Boot应用,我们一般会打成jar包使用内置容器运行,但是有时候我们想要像使用传统springweb项目一样,将Spring Boot应用打成WAR包,然后部署到外部容器运行,那么我们传统的使用Main类启动的方式稍显蹩脚,因为外部容器无法识别到应用启动类,需要在应用中继承SpringBootServletInitializer类,然后重写config方法,将其指向应用启动类。
在本篇文章中,我们将介绍SpringBootServletInitializer的原理和使用。它是WebApplicationInitializer的扩展,从部署在Web容器上的传统WAR文件运行SpringApplication。 此类将Servlet,Filter和ServletContextInitializer bean从应用程序上下文绑定到服务器。
扩展SpringBootServletInitializer类还允许我们通过覆盖configure()方法来配置servlet容器运行时的应用程序。
2
SpringBootServletInitializer
为了更加实用,我们将展示一个扩展Initializer类的主类的示例。
我们的名为WarInitializerApplication的@SpringBootApplication类扩展了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()方法添加相同的逻辑,以便嵌入式容器也可以获取。
总结
在本文中,我们介绍了SpringBootServletInitializer,并演示了如何使用它从经典的WAR归档文件中运行Spring Boot应用程序。
本文分享自 PersistentCoder 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!