Skip to content

Commit e3fc4bb

Browse files
author
Tommy Ludwig
committed
Auto-configure ClassLoaderMetrics
Auto-configures the ClassLoaderMetrics as part of the JVM metrics from Micrometer.
1 parent 114ece5 commit e3fc4bb

File tree

2 files changed

+37
-4
lines changed

2 files changed

+37
-4
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import io.micrometer.core.annotation.Timed;
2020
import io.micrometer.core.instrument.Clock;
21+
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
2122
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
2223
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
2324
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
@@ -92,6 +93,12 @@ public JvmThreadMetrics jvmThreadMetrics() {
9293
return new JvmThreadMetrics();
9394
}
9495

96+
@Bean
97+
@ConditionalOnMissingBean
98+
public ClassLoaderMetrics classLoaderMetrics() {
99+
return new ClassLoaderMetrics();
100+
}
101+
95102
}
96103

97104
@Configuration

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import io.micrometer.core.instrument.Clock;
2222
import io.micrometer.core.instrument.MeterRegistry;
2323
import io.micrometer.core.instrument.binder.MeterBinder;
24+
import io.micrometer.core.instrument.binder.jvm.ClassLoaderMetrics;
2425
import io.micrometer.core.instrument.binder.jvm.JvmGcMetrics;
2526
import io.micrometer.core.instrument.binder.jvm.JvmMemoryMetrics;
2627
import io.micrometer.core.instrument.binder.jvm.JvmThreadMetrics;
@@ -94,15 +95,17 @@ public void configuresMeterRegistries() {
9495
public void autoConfiguresJvmMetrics() {
9596
this.runner.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
9697
.hasSingleBean(JvmMemoryMetrics.class)
97-
.hasSingleBean(JvmThreadMetrics.class));
98+
.hasSingleBean(JvmThreadMetrics.class)
99+
.hasSingleBean(ClassLoaderMetrics.class));
98100
}
99101

100102
@Test
101103
public void allowsJvmMetricsToBeDisabled() {
102104
this.runner.withPropertyValues("management.metrics.binders.jvm.enabled=false")
103105
.run((context) -> assertThat(context).doesNotHaveBean(JvmGcMetrics.class)
104106
.doesNotHaveBean(JvmMemoryMetrics.class)
105-
.doesNotHaveBean(JvmThreadMetrics.class));
107+
.doesNotHaveBean(JvmThreadMetrics.class)
108+
.doesNotHaveBean(ClassLoaderMetrics.class));
106109
}
107110

108111
@Test
@@ -111,7 +114,8 @@ public void allowsCustomJvmGcMetricsToBeUsed() {
111114
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
112115
.hasBean("customJvmGcMetrics")
113116
.hasSingleBean(JvmMemoryMetrics.class)
114-
.hasSingleBean(JvmThreadMetrics.class));
117+
.hasSingleBean(JvmThreadMetrics.class)
118+
.hasSingleBean(ClassLoaderMetrics.class));
115119
}
116120

117121
@Test
@@ -120,7 +124,8 @@ public void allowsCustomJvmMemoryMetricsToBeUsed() {
120124
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
121125
.hasSingleBean(JvmMemoryMetrics.class)
122126
.hasBean("customJvmMemoryMetrics")
123-
.hasSingleBean(JvmThreadMetrics.class));
127+
.hasSingleBean(JvmThreadMetrics.class)
128+
.hasSingleBean(ClassLoaderMetrics.class));
124129
}
125130

126131
@Test
@@ -129,9 +134,20 @@ public void allowsCustomJvmThreadMetricsToBeUsed() {
129134
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
130135
.hasSingleBean(JvmMemoryMetrics.class)
131136
.hasSingleBean(JvmThreadMetrics.class)
137+
.hasSingleBean(ClassLoaderMetrics.class)
132138
.hasBean("customJvmThreadMetrics"));
133139
}
134140

141+
@Test
142+
public void allowsCustomClassLoaderMetricsToBeUsed() {
143+
this.runner.withUserConfiguration(CustomClassLoaderMetricsConfiguration.class)
144+
.run((context) -> assertThat(context).hasSingleBean(JvmGcMetrics.class)
145+
.hasSingleBean(JvmMemoryMetrics.class)
146+
.hasSingleBean(JvmThreadMetrics.class)
147+
.hasSingleBean(ClassLoaderMetrics.class)
148+
.hasBean("customClassLoaderMetrics"));
149+
}
150+
135151
@Test
136152
public void autoConfiguresLogbackMetrics() {
137153
this.runner.run(
@@ -256,6 +272,16 @@ JvmThreadMetrics customJvmThreadMetrics() {
256272

257273
}
258274

275+
@Configuration
276+
static class CustomClassLoaderMetricsConfiguration {
277+
278+
@Bean
279+
ClassLoaderMetrics customClassLoaderMetrics() {
280+
return new ClassLoaderMetrics();
281+
}
282+
283+
}
284+
259285
@Configuration
260286
static class CustomLogbackMetricsConfiguration {
261287

0 commit comments

Comments
 (0)