Spring Boot WAR es un concepto muy interesante . Si nosotros construimos una aplicación con Spring Boot habitualmente podemos usar Spring Initializer para generar un proyecto Maven o Gradle con unas dependencias u otras. Por ejemplo podemos utilizar un proyecto con Spring MVC.
La sencillez de Spring Boot es absoluta. Simplemente con poner que queremos un proyecto web es suficiente . No hay ni punto de comparación con un proyecto plano de Maven en el cual tenemos que dar de alta las diferentes dependencias.
Spring Boot WAR
En principio es facil preferir Spring Boot sobre un proyecto maven clásico ya que simplifica mucho . El problema es que los proyectos de Spring Boot llevan integrado un Tomcat y se despliegan como MicroServicios por defecto.
Así pues necesitaríamos usar Docker etc. La realidad es que la mayoría de la gente no esta desplegando arquitecturas de MicroServicios sino aplicaciones clásicas y algún Microservicio. ¿Podemos hacer uso de Spring Boot sin desplegar Microservicios?. Si que se puede pero nos veremos obligados a realizar algunos cambios en el proyecto . Vamos a verlo:
package com.arquitecturajava.web001; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @SpringBootApplication public class Web001Application { public static void main(String[] args) { SpringApplication.run(Web001Application.class, args); } }
Si nos fijamos el proyecto en principio es un proyecto de Maven de tipo JAR con un único fichero y una serie de dependencias de Spring Boot a nivel del POM. El primer paso es modificar las dependencias y añadir que la de Tomcat es provided. De esta forma estamos diciendo que el servidor sobre el que desplegamos ya incluye todo lo necesario y no es necesario incluir Tomcat.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency </dependencies> [/xml]
El segundo paso es evidentemente modificar el proyecto que es de tipo jar a tipo war
<groupId>com.arquitecturajava</groupId> <artifactId>Web001</artifactId><version>0.0.1-SNAPSHOT</version> <packaging>WAR</packaging>
Decirle a eclipse que refresque a nivel de maven:
El tercer paso es añadir una clase de WebInitializer a nivel de nuestro proyecto que se encargue de registrar la clase por defecto construida.
package com.arquitecturajava.web001; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.support.SpringBootServletInitializer; public class WebInicializador extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(Web001Application.class); } }
Ya solo nos queda construir un controlador con el que probar y referenciarle adecuadamente:
package com.arquitecturajava.web001; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class ControladorHola { @RequestMapping("/hola") public String hola() { return "hola spring boot"; } }
Le referenciamos :
package com.arquitecturajava.web001; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; import org.springframework.web.servlet.config.annotation.EnableWebMvc; @SpringBootApplication @ComponentScan("com.arquitecturajava.*") @EnableWebMvc public class Web001Application { public static void main(String[] args) { SpringApplication.run(Web001Application.class, args); } }
Es momento de ejecutar nuestra aplicacion con run on server:
Acabamos de utilizar el concepto de Spring Boot WAR para construir nuestra aplicación sin MicroServicios usando Spring Boot.
Otros artículos relacionados:
Hola, He intentado crear una aplicación web spring boot y desplegarla en Payara server utilizando jwt para la seguridad, pero no he logrado que funcione, logro generar el token pero despues tratato de acceder a un servicio y no funciona y hasta el momento no he encontrado alguna documentación que hable al respecto. cualquier ayuda será bienvenida. gracias.
Tienes que implementar un filtro que trate el token una vez le has generado en el resto de peticiones 🙂
Muchas gracias buen articulo, te puedo preguntar si tienes algún repositorio que cree un war pero manejado con gradle, es que necesito algo similar a esto pero en gradle
No te se decir, no tengo ningun ejemplo con ello
Hola Cecilio,
Que programa utilizas para diseñar las representaciones que haces?
Gracias y un saludo.
el omnigrafle para mac 🙂 https://www.omnigroup.com/omnigraffle
Gracias. Buen articulo.
gracias 🙂
Gracias!!!
De nada 🙂
“…integrado un Tomcat y se despliegan como MicroServicios por defecto.”
Yo he utilizado spring boot para hacer una aplicación clásica (con tomcat embebido) y realmente no he reconocido nada relaciondo con “microservicios” (que más o menos relaciono con API REST).
Podrías dar más detalle de esta afirmación?
En principio , esta muy orientado a microservicios que ya la aplicación tuya se despliega sola . Es por decirlo de alguna forma totalmente autonoma “microservicio”. No necesita de un JBoss o Tomcat o Weblogic ya que lo lleva integrado
Esto me generó una duda. Dijiste “El problema es que los proyectos de Spring Boot llevan integrado un Tomcat y se despliegan como MicroServicios por defecto. Así pues necesitaríamos usar Docker etc.” Como pongo en producción N microservicios creados con spring boot? Tienes algun post donde comentas esto?
en este mismo se despliega en tomcat