Tips Spring : [BOOT] Build Info (Detalles de la compilación)

logo springEl 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

Persistencia en BD con Spring Data JPA

Ficheros .properties en Spring IoC

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google photo

Estás comentando usando tu cuenta de Google. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.