Dentro del desarrollo de aplicaciones en un escenario J2EE con Spring Framework, ha sido muy destacable la irrupción de Spring Boot: una herramienta que facilita al desarrollador la puesta en marcha de un proyecto a partir de unos starters, que se pueden cargar para empezar a usar las características básicas de Spring con ese fin determinado.
En octubre de 2012 llegó al Jira de Spring una solicitud de característica en la que se hablaba de un contenedor de Spring acelerado que configuraría servicios sobre un contenedor web desde el método main. De esta forma se obtenía soporte a arquitecturas web sin contenedor basadas en Spring Framework. Esta petición fue creada por Mike Youngstrom y se puede marcar como el punto de partida del proyecto Spring Boot, que se empezó a desarrollar unos meses después y concluyó con el lanzamiento de Spring Boot 1.0.0 en Abril de 2014.
En la actualidad, el proyecto se encuentra en la versión 2.0.1, que requiere una versión 5 de Spring Framework, aunque se puede trabajar con Spring 4 para la versión 1.5.12 de Spring Boot. El proyecto tiene por objetivo facilitar la creación de aplicaciones productivas basadas en Spring, minimizando el ruido alrededor del desarrollo. Los desarrolladores nuevos y existentes se pueden centrar en el propio desarrollo sin tener que saber cómo se instala o configura la aplicación, ya que, por ejemplo, los servidores están embebidos y preconfigurados dentro del proyecto. Spring Boot no genera código ni se requiere de ninguna configuración en XML.
Para comenzar a desarrollar se recomienda un gestor de dependencias, como pueden ser Gradle o Maven. En estos gestores se define la versión de Spring Boot a utilizar y los starters que preconfigurarán el proyecto. Hay más de 40 que configuran la aplicación para empezar a usar desde aplicaciones básicas Spring MVC a aplicaciones basadas en Spring Batch o aplicaciones que hagan uso de JPA con Hibernate, así como aplicaciones con mensajería JMS o que tengan características para Programación Orientada a Aspectos (AOP).
Otra de las principales características de Spring Boot es que permite la configuración «out of the box» de la aplicación, prevaleciendo sobre la configuración que se haya creado dentro del proyecto empaquetado. En ella, se configura de una manera sencilla las características de la aplicación partiendo de unos valores por defecto que se establecen si no se especifican las propiedades. Por ejemplo, se puede establecer el puerto de escucha del servidor para una aplicación web desarrollada con Spring Boot (soporta contenedores como Tomcat, Jetty o Undertow) añadiendo simplemente la siguiente línea en el archivo application.properties:
server.port=8081
O añadiendo esta propiedad en el arranque de la aplicación:
–server.port=8081
Entrando más en detalle en algunas configuraciones de aplicaciones tradicionales, la configuración de los logs con la librería log4j de Apache suele ser un poco tediosa con carga de distintos ficheros. Para este caso, la configuración puede modificarse añadiendo una línea en el archivo application.properties:
logging.level.com.alvantia.example=DEBUG
La configuración de un datasource para acceder a una base de datos se limita a configurar en el archivo application.properties la ruta, el driver, usuario y contraseña. Esta configuración deja disponible un datasource que el ORM concreto que se esté usando, por ejemplo Hibernate-JPA o Mybatis, usará automáticamente sin necesidad de una configuración adicional, simplemente usando el starter adecuado.
Además, Spring Boot provee para entornos productivos un sistema de métricas basado en «micrometer» que se puede integrar con distintos sistemas de monitorización (Atlas, por defecto; Datadog, Ganglia, etc.), un sistema de comprobación de la salud de la aplicación para verificar que la aplicación sigue viva o incluso forzar un heapdump de la aplicación. También mediante estas herramientas se puede modificar el nivel de log en caliente para un paquete o clase concreta. Este sistema es el Spring Boot Actuator y tiene una API muy amplia que puede personalizarse para adecuarse a las necesidades concretas de la aplicación.
Todas estas características, unidas a la simplicidad de las configuraciones mediante anotaciones y clases Java, aprovechando las cualidades de las últimas versiones de Spring Framework, hacen que alvantia considere a Spring Boot una herramienta a tener muy en cuenta en desarrollos Java de cualquier índole, ya que aporta facilidad en el arranque del desarrollo y mejora la eficiencia haciendo que los desarrolladores se puedan centrar en el código a realizar.
Hace años que alvantia apuesta por Spring Framework como core de las aplicaciones desarrolladas en Java y, en la actualidad, con los desarrollos en la nube consideramos Spring Boot como una herramienta indispensable para el desarrollo de Microservicios, y totalmente adaptable a contenedores de Docker o a environments de Amazon Web Services. Son servicios standalone, se pueden ejecutar en su propio contenedor (como en Docker) y se puede lanzar y configurar fácilmente en un script, lo que es muy bueno para el autoescalado y despliegue en la nube.
Spring Boot ha llegado para acelerar los desarrollos y en alvantia apostamos por ello. Es el momento de Spring Boot.