El plugin de Maven de Spring Boot, además de empaquetar la aplicación en un jar autoejecutable, tiene un goal muy interesante que permite generar un fichero llamado build-info.properties con información sobre la compilación del proyecto. En Spring Boot 2.1 este fichero contiene la siguiente información.
#Properties #Sat May 04 20:15:51 CET 2019 build.time=2019-03-30T19\:15\:50.957Z build.artifact=spring-tips-boot build.group=com.danielme.spring.tips build.name=spring-tips-boot build.version=1.0
El fichero se genera con el comando mvn spring-boot:build-info pero puede ser generado de forma automática al compilar.
<?xml version="1.0" encoding="UTF-8"?> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>build-info</id> <goals> <goal>build-info</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
También se pueden añadir propiedades adicionales.
<?xml version="1.0" encoding="UTF-8"?> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <executions> <execution> <id>build-info</id> <goals> <goal>build-info</goal> </goals> <configuration> <additionalProperties> <sourceEncoding>${project.build.sourceEncoding}</sourceEncoding> <custom>custom value</custom> </additionalProperties> </configuration> </execution> </executions> </plugin>
build.sourceEncoding=UTF-8 build.time=2019-03-30T19\:31\:50.914Z build.artifact=spring-tips-boot build.custom=custom value build.group=com.danielme.spring.tips build.name=spring-tips-boot build.version=1.0
Las propiedades de este fichero son accesibles a través del bean BuildProperties el cual es instanciado automáticamente por Spring Boot y puede inyectarse donde lo queremos utilizar.
package com.danielme.spring.tips.boot.services; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.info.BuildProperties; import org.springframework.stereotype.Service; @Service public class BuildInfoService { private static final Logger logger = LoggerFactory.getLogger(BuildInfoService.class); @Autowired private BuildProperties buildProperties; public void print() { logger.info(buildProperties.getVersion()); logger.info(buildProperties.get("sourceEncoding")); }
08:46:16,148 PM INFO BuildInfoService:18 - 1.0 08:46:16,148 PM INFO BuildInfoService:19 - UTF-8
Una de las principales utilidades de esta información es poder mostrar qué versión\compilación de la aplicación se está ejecutando. Si usamos Spring Boot Actuator, todas las propiedades definidas en el fichero build-info.properties son publicadas automáticamente en el endpoint /info.
{ "build":{ "version":"1.0", "sourceEncoding":"UTF-8", "artifact":"spring-tips-boot", "name":"spring-tips-boot", "custom":"custom value", "group":"com.danielme.spring.tips", "time":"2019-05-04T16:45:59.919Z" } }
Otros tutoriales relacionados con Spring
Introducción a Spring Boot: Aplicación Web con servicios REST y Spring Data JPA
Spring Boot: Gestión de errores en aplicaciones web y REST
Testing en Spring Boot con JUnit 45. Mockito, MockMvc, REST Assured, bases de datos embebidas
Spring JDBC Template: simplificando el uso de SQL