1. Información general
En este tutorial, veremos una introducción rápida de SpringBootServletInitializer .
Esta es una extensión de WebApplicationInitializer que ejecuta SpringApplication desde un archivo WAR tradicional implementado en un contenedor web. Esta clase une los beans Servlet , Filter y ServletContextInitializer desde el contexto de la aplicación al servidor.
La extensión de la clase SpringBootServletInitializer también nos permite configurar nuestra aplicación cuando es ejecutada por el contenedor de servlets, anulando el método configure () .
2. SpringBootServletInitializer
Para ser más práctico, mostraremos un ejemplo de una clase principal que amplía la clase Initializer .
Nuestra clase @SpringBootApplication llamada WarInitializerApplication extiende SpringBootServletInitializer y anula el método configure () . Ese método usa SpringApplicationBuilder para simplemente registrar nuestra clase como una clase de configuración de la aplicación:
@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() { // ... } } }
Ahora, si empaquetamos nuestra aplicación como un WAR, podremos implementarla en cualquier contenedor web de forma tradicional, que también ejecutará la lógica que agregamos en el método configure () .
Si queremos empaquetarlo como un archivo JAR, entonces necesitaremos agregar la misma lógica al método main () para que el contenedor incrustado pueda recogerlo también.
3. Conclusión
En este artículo, presentamos SpringBootServletInitializer y demostramos cómo podemos usarlo para ejecutar aplicaciones Spring Boot desde un archivo WAR clásico.
El código fuente completo para el ejemplo está disponible en GitHub. Este es un proyecto basado en Maven, por lo que se puede importar y usar tal cual.