From 6a65aa4a23b7c70b4880c657f37a0058c9271758 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Edd=C3=BA=20Mel=C3=A9ndez?= Date: Wed, 27 Apr 2022 21:38:19 -0500 Subject: [PATCH] Auto-configure Micrometer's JvmInfoMetrics See gh-30832 --- .../metrics/JvmMetricsAutoConfiguration.java | 8 +++++++ .../JvmMetricsAutoConfigurationTests.java | 21 ++++++++++++++++++- .../src/docs/asciidoc/actuator/metrics.adoc | 1 + 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfiguration.java index 929b7024bf9..7522d5d114d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfiguration.java @@ -20,6 +20,7 @@ import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmHeapPressureMetrics; +import io.micrometer.core.instrument.binder.jvm.JvmInfoMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; @@ -34,6 +35,7 @@ import org.springframework.context.annotation.Bean; * {@link EnableAutoConfiguration Auto-configuration} for JVM metrics. * * @author Stephane Nicoll + * @author Eddú Meléndez * @since 2.1.0 */ @AutoConfiguration(after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class }) @@ -71,4 +73,10 @@ public class JvmMetricsAutoConfiguration { return new ClassLoaderMetrics(); } + @Bean + @ConditionalOnMissingBean + public JvmInfoMetrics jvmInfoMetrics() { + return new JvmInfoMetrics(); + } + } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfigurationTests.java index ecb3a5ad2ad..95318dc5d8a 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/JvmMetricsAutoConfigurationTests.java @@ -19,6 +19,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmHeapPressureMetrics; +import io.micrometer.core.instrument.binder.jvm.JvmInfoMetrics; import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics; import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics; import org.junit.jupiter.api.Test; @@ -38,6 +39,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Andy Wilkinson * @author Stephane Nicoll + * @author Eddú Meléndez */ class JvmMetricsAutoConfigurationTests { @@ -79,10 +81,17 @@ class JvmMetricsAutoConfigurationTests { assertMetricsBeans().andThen((context) -> assertThat(context).hasBean("customClassLoaderMetrics"))); } + @Test + void allowsCustomJvmInfoMetricsToBeUsed() { + this.contextRunner.withUserConfiguration(CustomJvmInfoMetricsConfiguration.class) + .run(assertMetricsBeans().andThen((context) -> assertThat(context).hasBean("customJvmInfoMetrics"))); + } + private ContextConsumer assertMetricsBeans() { return (context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .hasSingleBean(JvmHeapPressureMetrics.class).hasSingleBean(JvmMemoryMetrics.class) - .hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class); + .hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class) + .hasSingleBean(JvmInfoMetrics.class); } @Configuration(proxyBeanMethods = false) @@ -135,4 +144,14 @@ class JvmMetricsAutoConfigurationTests { } + @Configuration(proxyBeanMethods = false) + static class CustomJvmInfoMetricsConfiguration { + + @Bean + JvmInfoMetrics customJvmInfoMetrics() { + return new JvmInfoMetrics(); + } + + } + } diff --git a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/actuator/metrics.adoc b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/actuator/metrics.adoc index 848c00341dc..68d429c7501 100644 --- a/spring-boot-project/spring-boot-docs/src/docs/asciidoc/actuator/metrics.adoc +++ b/spring-boot-project/spring-boot-docs/src/docs/asciidoc/actuator/metrics.adoc @@ -634,6 +634,7 @@ The following JVM metrics are provided: * Statistics related to garbage collection * Thread utilization * The number of classes loaded and unloaded +* JVM version information