Spring Boot es una de las tecnologías dentro del mundo de Spring de las que más se usa actualmente .¿Qué es y cómo funciona Spring Boot? . Para entender el concepto primero debemos reflexionar sobre cómo construiamos aplicaciones con Spring Framework antiguamente.
Fundamentalmente existian tres pasos a realizar . El primero es crear un proyecto Maven/Gradle y descargar las dependencias necesarias. En segundo lugar esta el proceso de crear la aplicación , pero para ello nos guste o no debemos abordar un proceso amplio de configuración de la aplicación , con ficheros XML o anotaciones y configuraciones muy especificas que muchas veces solo un experto era capaz de abordar con garantias. Por último debiamos desplegarla en un servidor. Si nos ponemos a pensar un poco a detalle en el tema , únicamente el paso dos es una tarea de desarrollo y dentro de esa tarea 2 incluso la parte de configuración no esta claro que sea desarrollo en sí. Son cosas que están más orientados a infraestructura que al desarrollo en sí mismo. No deberíamos tener que estar eligiendo continuamente las dependencias y el servidor de despliegue así como realizar una configuración inicial solo para expertos.
Spring Boot
SpringBoot nace con la intención de simplificar los pasos 1 y 3 y simplificar la configuración y que nos podamos centrar en el desarrollo de nuestra aplicación. ¿Cómo funciona?. El enfoque es sencillo y lo entenderemos realizando un ejemplo. Para ello nos vamos a conectarnos al asistente de Boot que se denomina Spring Initializer.
String Boot Starter y simplificaciones
El asistente es intuitivo , elegimos el package al que queremos que nuestras clases pertenezcan , elegimos el nombre del proyecto y por último las dependencias. Eso sí ya no se trata de elegir JAR por JAR sino por tipo de aplicación que necesitamos a este concepto se le denomina Spring Starter. Por lo tanto en vez de tener que elegir 10 o 20 dependencias es mucho más cómodo elegir 2 starters y Spring Boot se encarga del resto.
En este caso voy a construir una aplicación Spring MVC y elijo la dependencia web o Starter Web. Pulsamos generar proyecto y nos descargará un proyecto Maven en formato zip . Descomprimimos el proyecto y este es su contenido.
Una aplicación de Spring con estructura Maven totalmente configurada. El siguiente paso importar esta aplicación a nuestro Eclipse. Vamos a ver el contenido de la clase HolaSpringBootApplication
package com.arquitecturajava; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HolaSpringBootApplication { public static void main(String[] args) { SpringApplication.run(HolaSpringBootApplication.class, args); } }
Esta clase es la encargada de arrancar nuestra aplicación de Spring a diferencia de un enfoque clásico no hace falta desplegarla en un servidor web ya que Spring Boot provee de uno.
Spring Boot Controller
Vamos a construir un controlador de HolaMundo sencillo:
import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class ControladorHola { @RequestMapping("/") @ResponseBody String hola() { return "HolaMundo"; } }
Este controlador registra la url de / para que nos devuelva “HolaMundo” . Es momento de ejecutar nuestra aplicación como una aplicación de consola utilizando botón derecho run as Java Application en el fichero de HolaSpringBootApplication. Esto abrirá un servidor web y accederemos a la url.
SpringBoot nos ha simplificado toda la operativa a la hora de construir la aplicación prácticamente no hemos tenido que seleccionar dependencias de Spring y no ha hecho falta definir ningun servidor Tomcat en nuestro entorno de desarrollo ya que Spring Boot trae uno integrado. Vamos a ver un ejemplo desde cero con un video del curso gratuito de Spring Boot ;).
Spring Boot Tomcat y Docker
¿Porque Spring Boot trae integrado Tomcat? . Muy sencillo porque a partir de ahora los despliegues no se van a realizar en Servidores Web Standard que almacenan decenas de aplicaciones sino que cada una de las aplicaciones se va a desplegar en un contenedor Docker completamente aislada del resto e independiente . El contenedor necesita que la aplicación sea completamente operativa por si sola.
Spring Boot WAR
Si tu problema es que hoy por hoy no tienes contenedores Docker ni tienes Kubernetes entre tus herramientas de despliegue , no hay problema . Puedes seguir usando Spring Boot y desplegarlo en un entorno de Tomcat o JBoss directamente simplemente modificando el arranque y haciendo que nuestra aplicación en vez de desplegarse como JAR se despliegue como WAR.
Esto no cambiara en gran manera la clase principal
@SpringBootApplication public class HolaSpringBootApplication { public static void main(String[] args) { SpringApplication.run(HolaSpringBootApplication.class, args); } }
Pero añadirá una nueva clase que se encarga de integrarlo con Tomcat de forma transparente:
package com.arquitecturajava.HolaMundo; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; public class ServletInitializer extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { return application.sources(HolaMundoApplication.class); } }
Conclusión
Apostemos siempre que podamos por usar Spring Boot:
[…] Qué es Spring Boot:https://www.arquitecturajava.com/que-es-spring-boot/#String_Boot_Starter_y_simplificaciones […]
Necesito aprender Spring boot Java etc. Para desarrollar
Tienes mis cursos gratuitos 🙂 y luego los de pago
Nuevo lanzamiento Spring Boot Septiembre de 2022 en español. En e-book para todo hablahispana.
https://www.amazon.com/-/es/Rafael-Benedettelli-ebook/dp/B0BGJK3GHD
En tapa blanda disponible para Argentina por ml
https://articulo.mercadolibre.com.ar/MLA-1170165058
Cecilio,
¿Para JSF es la misma configuración que hizo en el video? o hay que configurar algo adicional? he visto algunos ejemplos de configuraciones como springboot + joinfaces que incluyen JSF + primefaces + richfaces + omnifaces y otros frameworks. Pero ¿con la configuracion que usted hizo en el video y agregando las dependencias de JSF y Primefaces seria suficiente? o habria que realizar configuraciones adicionales?
No supongo que tengas que dar de alta algunas cosas adicionales .Ahora mismo no tengo ningún ejemplo concreto 🙁
Buenas tardes, que servidor local recomiendan para el deploy de aplicaciones con Spring Boot? y por que?
Saludos.
Se desplieguan solas ya que trae un tomcat integrado
buenas, una pregunta, si quisiera hacer una aplicación de escritorio. Cuals seria un framework recomendado.
No hay muchos frameworks para Escritorio casi todo se sigue haciendo con Swing . Eso si siempre puedes integrar Spring y JPA en esas aplicaciones ya que son frameworks neutros. Un framework que es de JavaScript que tiene buena fama en escritorio es Electron
Lo que pasa es que Swing es complejo y requieres muchos conocimientos sólidos, sobre todo al manejar árboles, tablas e intercomunicación entre frames; pero una vez que lo entiendes y los dominas no lo vas a querer cambiar.
JavaFX es mas personalizado que Java swing podes ponerles estilos.
Fantastico tutorial:
Me da error en el POM:
Justo aqui:
org.springframework.boot
spring-boot-starter-parent
2.1.2.RELEASE
Alguna sugerencia ??
Pues así a bote pronto no sabría decirte.
Revisa tus dependencias que agregaste.
Probablemente debe ser la versión de la librería que esta llamando desde Maven.
Hola Cecilio Álvarez, quería saber si das algun curso en línea, trabajo con Sprig Boot, Mybatis y Prime faces en conjunto.
Pero tiene que ser avanzado, para ser mas rapido en los Proyectos.
Gracias
Pues en estos momentos no lo tengo pensado , he grabado algunos cursos online que se estan vendiendo bien y a futuro grabaré más cosas pero a corto plazo no te se decir que exactamente
Hola Cecilio, ¿como podria optar a los cursos online de Spring Boot que has grabado? En caso de que así no sea, ¿sabrias decirme algún curso que merezca la pena o alguien que pueda impartir clases particulares?
Muchisimas gracias.
Un saludo,
No tengo ningún curso de Spring boot grabado ,tengo uno de Spring a secas , supongo que en los próximos meses grabe algo de Boot pero lo estoy dando una vuelta 🙂
Cecilia Álvaresz el curso de spring que tienes donde lo estas vendiendo me podrías pasar tu portal web para comprarlo?
prueba este link https://cursos.arquitecturajava.com/p/spring-boot/?product_id=1049303&coupon_code=SPRINGBOOT2019&preview=logged_out
hola Cecilio.
Si tengo varios endpoint en una clase con @RestController imagino que estos van a funcionar en el mismo microservicio… entonces tendría que crear un proyecto por cada endpoint?
no puedes tener varios endpoins en el mismo proyecto
me refiero a 2 métodos con @RequestMapping
sin problema
Hola tengo una duda, ¿Por què cuando creo la clase ControladorHola, en un paquete diferente NO FUNCIONA?
Revisa los component scan que es la anotacion que se encarga del registro
hola a todos, estoy en busca de un middleware java spring si alguien se interesa favor de enviarme sus datos de contacto.
Tengo una duda. Supongamos que estoy creando una REST Api donde cada endpoint lo tendré como un microservicio independiente. Cada microservicio es un proyecto nuevo de spring boot independiente? O de alguna manera puedo vincular bajo un proyecto spring “root” y los N microservicios que se crearía serían “children” de este proyecto “root” ?? Una arquitectura así es posible? Es una duda que tengo. Agradecido de antemano
Si lo quieres trabajar como microservicios entonces, por cada microservicio crea un proyecto independiente, puesto que si lo haces dentro de una esto sería un proyecto con N módulos
Hola Cecilio,
Antes que nada gracias por el post, muy bueno…
Tengo algo realmente inquietante, es posible Spring Boot + Jboss EAP 6.4 ?
Y en caso afirmativo, como se podría llevar a cabo?
Pues no lo he probado pero en principio debiera ser posible lo que pasa es que Jboss usa los jboss modules y habrá que andarse con cuidado
Primero que nada, muchas gracias Maestro.
Segundo hay alguna manera de hacer el deploy en un servidor externo ?
Gracias.
Si en principio vale con eliminar la dependencia de tomcat e implementar un Web Initializer , a ver su escribo algo sobre el tema 🙂
Buenas,
¿cómo funciona cuando ya tenemos instalado un tomcat en la máquina? ¿levanta dos sobre el mismo puerto?
Y si no hay ninguno instalado ¿como instalo dos aplicaciones en el mismo servidor?
Gracias
Esta semana intento escribir algo sobre el tema , pero en principio la respuesta es que hay que usar containers docker 🙂
Hola, ya has escrito algo sobre el tema?
No todavía no pero espero en dos o tres semanas ir añadiendo cosas sobre docker y spring boot 🙂
Tienes algo sobre docker? y podrias escribir algo sobre microservicios y kubernates?
Saludos
No , en estos momentos , supongo que escriba algo más adelante ya que tengo q abordar algunos proyectos de ese estilo a fin de año
Interesante y super simple pero queda una gran caja negra, que servidor se encarga de desplegar la aplicación? que pasa si quiero cambiar ek puerto de escucha o configurar JDNI?
modificas el fichero de configuracion
Heyyyy desde Colombia.
Un abrazo, un saludo y muchas gracias brother.
Ejemplo sencillo, práctico y muy fácil de implementar.
Gracias
gracias 🙂
Amigo saludos muy buen post, una consulta:
Siguiendo esto ejemplo como haría yo para luego hacer el deploy en produccion?, es decir: Tomo este ejemplo base y ahora quiero instalarlo en el cliente (asi basico que lo pueda ejecutar desde la linea de comando).
Mi pregunta es como hago para hacer el deploy final? se exporta solo como una jar ejecutable? o para el caso de spring-boot hay que instalar mas recursos/herramienta (aparte de la JVM) en el cliente?
Espero puedan aclarar mi duda.
Saludos.
Spring boot incluye integrado un tomcat, así que con arrancarlo vale
Excelente explicación, muy acertada la lógica de spring boot al unificar los pasos de selección de dependencias y despliegue en el servidor, con tu explicación nos queda muy claro el tema.
Excelente articulo rodrigo. Aunque tambien me queda la duda ¿que pasa cuando quiero desplegar la aplicacion en un servidor distinto al embebido por el propio spring boot?¿Se debe realizar un war?
No debieras tener problemas , Spring boot no es obligatorio que use tomcat embebido
Informacion muy concreta. muchas gracias
De nada 🙂
[…] ¿Qué es Spring Boot?: Como siempre la gente de Spring sigue innovando y Spring Boot es una de las herramientas que más interés ha generado en la comunidad. […]
[…] artículos relacionados : ¿Qué es Spring Boot? , Reactive MicroServices y Arquitectura , ¿Qué es Docker y para qué […]
Hola Cecilio que buen post, tengo una pregunta cual es el servidor web que tiene embebido que tiene el Spring Boot
Tiene un tomcat 🙂
Es recomendable usar Spring Boot para un proyecto grande o es mejor solo usar Spring.
Se puede usar sin problemas , pero cuando uno empieza un proyecto grande es mejor minimizar los riesgos , si no se conoce una tecnología hay que valorarla con calma 🙂
Excelente respuesta Cecilio Alvarez. Admiro tu blog.
¡Saludos!
A mi no me entra en la cabeza…que pasa con el servidor? Springboot empaqueta uno en la aplición? como un jar?
Si son las nuevas Arquitecturas de MicroServicios habrá que ver como avanza todo
[…] ello necesitamos construir una aplicación con Spring Framework , en este caso nos apoyaremos en Spring Boot y seleccionaremos Spring MVC y Spring AOP. El conjunto de componentes a desarrollar es pequeño , […]
me iluminó jaja. buen post
gracias
[…] Spring Thymeleaf es el nuevo motor de plantillas de Spring MVC . Durante muchos años hemos utilizado librerías de etiquetas para gestionar la capa de presentación tipo JSTL o Spring Forms ,pero el uso de etiquetas aunque potente no resulta del todo natural. Los motores de plantillas siempre han sido una tecnología interesante y se han usado ampliamente soluciones como Velocity o FreeMaker . Spring Thymeleaf retoma este enfoque y lo potencia. Vamos a ver como configurar este motor de plantillas seleccionando las dependencias con SpringBoot […]
Cecilio Álvarez gran articulo!. Una pregunta: Es factible con Spring Boot construir microservicios?. Gracias de antemano.
Aplausos !! ( no es con vos Cecilio, admiro tu trabajo ) perooo… Grails existe hace unos cuantos años .. y te da, hace años lo que java 8 recien empieza a decir.. bueno.. .
Tienes mucha razón David en una parte , Grails aporta muchas cosas y es muy práctico , yo en su momento pensé que se haría un hueco muy grande. Luego la reflexión que he hecho es que al final la gente trabaja con Java ya que es lo que más conoce. Cuesta cambiar de lenguaje … aunque sea un lenguaje tan sencillo como Grails pero a la gente le cuesta 🙂
gracias por el post! muy bueno
de nada 🙂
Claro, conciso y muy útil. Gracias.
de nada 🙂