Hot restart con Spring Boot DevTools

Es común en las plataformas y tecnologías del lado del frontend/mobile el uso de la tecnología de recarga en caliente o hot reload, que básicamente significa que a medida que programamos no es necesario un proceso de reconstrucción para la representación de los cambios. Frameworks como ReactJS, Angular, Flutter incorporan esto de forma casi predeterminada, sin embargo del lado del backend esta característica no es común.

Spring Boot por su parte trajo mejoras a Spring como el servidor de aplicaciones autocontenido y un mejor manejo de configuraciones. Teniendo ya como ventaja de que el proceso de puesta en operación de una aplicación Spring Boot depende únicamente de su construcción/ejecución sin necesidad de un servidor de aplicaciones de terceros, nace en el proyecto Spring Boot DevTools.

Spring Boot DevTools es implementa el concepto de hot restart; cuando una aplicación Spring Boot inicia se construye la aplicación, la cual se divide en dos partes fundamentales, por un lado el classpath de nuestra aplicación en desarrollo, y por otro lado las bibliotecas de terceros empleadas. La tecnología de hot restart de Spring Boot DevTools, luego del primer arranque solo recargar el proyecto de los elementos de cambios que se produzcan en el classpath principal en el que estamos desarrollando.

Cambios en los assets del proyecto por defecto no están incluido como “vigilados” para disparar el trigger de restart de la aplicación.

A diferencia de lo que se conoce como un “cold start” (a arranque desde cero), la tecnología de devtools produce resultados más rápidos que una ejecución normal.

Activando DevTools en Spring Boot

El proceso de comenzar a usar DevTools es bastante simple, basta con incluir la siguiente dependencia en nuestro proyecto Spring Boot.

Para maven:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>
</dependencies>

Para Gradle:

dependencies {
    compileOnly("org.springframework.boot:spring-boot-devtools")
}

Por defecto, al incluir la dependencia quedará activado, podemos por properties controlar su activación/desactivación:

spring.devtools.restart.enabled=[true|false]

Puedes ver más detalles sobre esta utilidad en su página oficial.