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 7522d5d114..1ac29acea7 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 @@ -18,6 +18,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics; import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; +import io.micrometer.core.instrument.binder.jvm.JvmCompilationMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmHeapPressureMetrics; import io.micrometer.core.instrument.binder.jvm.JvmInfoMetrics; @@ -79,4 +80,10 @@ public class JvmMetricsAutoConfiguration { return new JvmInfoMetrics(); } + @Bean + @ConditionalOnMissingBean + public JvmCompilationMetrics jvmCompilationMetrics() { + return new JvmCompilationMetrics(); + } + } 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 95318dc5d8..8b2599863c 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 @@ -17,6 +17,7 @@ package org.springframework.boot.actuate.autoconfigure.metrics; import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics; +import io.micrometer.core.instrument.binder.jvm.JvmCompilationMetrics; import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics; import io.micrometer.core.instrument.binder.jvm.JvmHeapPressureMetrics; import io.micrometer.core.instrument.binder.jvm.JvmInfoMetrics; @@ -87,11 +88,17 @@ class JvmMetricsAutoConfigurationTests { .run(assertMetricsBeans().andThen((context) -> assertThat(context).hasBean("customJvmInfoMetrics"))); } + @Test + void allowsCustomJvmCompilationMetricsToBeUsed() { + this.contextRunner.withUserConfiguration(CustomJvmCompilationMetricsConfiguration.class).run( + assertMetricsBeans().andThen((context) -> assertThat(context).hasBean("customJvmCompilationMetrics"))); + } + private ContextConsumer assertMetricsBeans() { return (context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class) .hasSingleBean(JvmHeapPressureMetrics.class).hasSingleBean(JvmMemoryMetrics.class) .hasSingleBean(JvmThreadMetrics.class).hasSingleBean(ClassLoaderMetrics.class) - .hasSingleBean(JvmInfoMetrics.class); + .hasSingleBean(JvmInfoMetrics.class).hasSingleBean(JvmCompilationMetrics.class); } @Configuration(proxyBeanMethods = false) @@ -154,4 +161,14 @@ class JvmMetricsAutoConfigurationTests { } + @Configuration(proxyBeanMethods = false) + static class CustomJvmCompilationMetricsConfiguration { + + @Bean + JvmCompilationMetrics customJvmCompilationMetrics() { + return new JvmCompilationMetrics(); + } + + } + } 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 49d75cc52a..4f617f2fbd 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 @@ -676,6 +676,7 @@ The following JVM metrics are provided: * Thread utilization * The number of classes loaded and unloaded * JVM version information +* JIT compilation time