From a38c0e1e0aef2e4d45de099bc0d6fb0c4e15b922 Mon Sep 17 00:00:00 2001 From: Alexey Genus Date: Fri, 1 Aug 2025 14:04:19 +0200 Subject: [PATCH] Enable virtualThreadMetrics bean on if virtual threads are enabled Signed-off-by: Alexey Genus --- .../jvm/JvmMetricsAutoConfiguration.java | 3 +++ .../jvm/JvmMetricsAutoConfigurationTests.java | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/module/spring-boot-metrics/src/main/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfiguration.java b/module/spring-boot-metrics/src/main/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfiguration.java index 48d0d4ab4855..35cc488c66e0 100644 --- a/module/spring-boot-metrics/src/main/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfiguration.java +++ b/module/spring-boot-metrics/src/main/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfiguration.java @@ -36,8 +36,10 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.autoconfigure.condition.ConditionalOnThreading; import org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration; import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; +import org.springframework.boot.thread.Threading; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ImportRuntimeHints; import org.springframework.util.ClassUtils; @@ -102,6 +104,7 @@ JvmCompilationMetrics jvmCompilationMetrics() { @ConditionalOnClass(name = VIRTUAL_THREAD_METRICS_CLASS) @ConditionalOnMissingBean(type = VIRTUAL_THREAD_METRICS_CLASS) @ImportRuntimeHints(VirtualThreadMetricsRuntimeHintsRegistrar.class) + @ConditionalOnThreading(Threading.VIRTUAL) MeterBinder virtualThreadMetrics() throws ClassNotFoundException { Class virtualThreadMetricsClass = ClassUtils.forName(VIRTUAL_THREAD_METRICS_CLASS, getClass().getClassLoader()); diff --git a/module/spring-boot-metrics/src/test/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfigurationTests.java b/module/spring-boot-metrics/src/test/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfigurationTests.java index 8294d7d1b25a..ed923412705e 100644 --- a/module/spring-boot-metrics/src/test/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfigurationTests.java +++ b/module/spring-boot-metrics/src/test/java/org/springframework/boot/metrics/autoconfigure/jvm/JvmMetricsAutoConfigurationTests.java @@ -108,9 +108,17 @@ void allowsCustomJvmCompilationMetricsToBeUsed() { @Test @EnabledForJreRange(min = JRE.JAVA_21) - void autoConfiguresJvmMetricsWithVirtualThreadsMetrics() { + void doesntAutoConfigureJvmMetricsWithVirtualThreadsMetricsIfVirtualThreadsAreDisabled() { this.contextRunner.run(assertMetricsBeans() - .andThen((context) -> assertThat(context).hasSingleBean(getVirtualThreadMetricsClass()))); + .andThen((context) -> assertThat(context).doesNotHaveBean(getVirtualThreadMetricsClass()))); + } + + @Test + @EnabledForJreRange(min = JRE.JAVA_21) + void autoConfiguresJvmMetricsWithVirtualThreadsMetricsIfVirtualThreadsAreEnabled() { + this.contextRunner.withPropertyValues("spring.threads.virtual.enabled=true") + .run(assertMetricsBeans() + .andThen((context) -> assertThat(context).hasSingleBean(getVirtualThreadMetricsClass()))); } @Test