starter actuator spring-boot

spring-boot - actuator - spring boot admin



¿Cómo agrego cosas al punto final/info en el arranque de primavera programáticamente? (4)

Debería ser posible agregar un PropertySource personalizado dentro de un ApplicationListener para agregar propiedades personalizadas de información * al entorno (consulte esta respuesta para ver un ejemplo: Cómo anular la aplicación de inicio de Spring.properties programáticamente )

¿Cómo agrego cosas al punto final /info en Spring Boot programáticamente? La documentation indica que esto es posible para el punto final /health mediante el uso de la interfaz HealthIndicator . ¿Hay algo para el punto final /info también?

Me gustaría agregar el nombre y la versión del sistema operativo y otra información de tiempo de ejecución allí.



La respuesta aceptada en realidad afecta al InfoEndpoint y no se agrega a ella.

Una forma que encontré para agregar a la información es, en una clase @Configuration , agregar un método @Autowired que agregue propiedades adicionales siguiendo las convenciones de info.* entorno. Luego InfoEndpoint los recogerá cuando se invoque.

Puedes hacer algo como lo siguiente:

@Autowired public void setInfoProperties(ConfigurableEnvironment env) { /* These properties will show up in the Spring Boot Actuator /info endpoint */ Properties props = new Properties(); props.put("info.timeZone", ZoneId.systemDefault().toString()); env.getPropertySources().addFirst(new PropertiesPropertySource("extra-info-props", props)); }


Una forma de hacer lo que quiere (en el caso de que tenga propiedades totalmente personalizadas que deba mostrar) es declarar un bean de tipo InfoEndpoint que anulará el valor predeterminado.

@Bean public InfoEndpoint infoEndpoint() { final LinkedHashMap<String, Object> map = new LinkedHashMap<String, Object>(); map.put("test", "value"); //put whatever other values you need here return new InfoEndpoint(map); }

Como puede ver en el código anterior, el mapa puede contener cualquier información que necesite.

En el caso de que los datos que desea mostrar puedan ser recuperados por el entorno y no sean personalizados, no necesita reemplazar el bean InfoEndpoint , sino que simplemente puede agregar propiedades al archivo de propiedades con un prefijo de info . Un ejemplo donde se evalúa el nombre del sistema operativo es el siguiente:

info.os = ${os.name}

En el código anterior, Spring Boot evaluará la expresión de la mano derecha antes de devolver la propiedad en el punto final /info .

Una nota final es que hay una tonelada de información de entorno que ya está disponible en el punto final /env

Actualizar

Como lo señaló @shabinjo, en las versiones más recientes de Spring Boot no hay InfoEndpoint constructor de InfoEndpoint que acepte un mapa. Sin embargo, puede utilizar el siguiente fragmento de código:

@Bean public InfoEndpoint infoEndpoint() { final Map<String, Object> map = new LinkedHashMap<String, Object>(); map.put("test", "value"); //put whatever other values you need here return new InfoEndpoint(new MapInfoContributor(map)); }

El código anterior anulará completamente la información predeterminada que terminaría en /info . Para superar este problema se podría agregar el siguiente bean

@Bean public MapInfoContributor mapInfoContributor() { return new MapInfoContributor(new HashMap<String, Object>() {{ put("test", "value"); }}); }