Skip to content

Commit 96a36cf

Browse files
committed
Merge branch '4.0.x'
Closes gh-50287
2 parents d7e49dc + 2c18012 commit 96a36cf

2 files changed

Lines changed: 38 additions & 3 deletions

File tree

module/spring-boot-micrometer-metrics/src/main/java/org/springframework/boot/micrometer/metrics/autoconfigure/MetricsAutoConfiguration.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.micrometer.core.annotation.Timed;
2020
import io.micrometer.core.instrument.Clock;
2121
import io.micrometer.core.instrument.MeterRegistry;
22+
import io.micrometer.core.instrument.Metrics;
2223
import io.micrometer.core.instrument.binder.MeterBinder;
2324
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
2425
import io.micrometer.core.instrument.config.MeterFilter;
@@ -76,8 +77,8 @@ PropertiesMeterFilter propertiesMeterFilter(MetricsProperties properties) {
7677
}
7778

7879
@Bean
79-
MeterRegistryCloser meterRegistryCloser(ApplicationContext context) {
80-
return new MeterRegistryCloser(context);
80+
MeterRegistryCloser meterRegistryCloser(ApplicationContext context, MetricsProperties properties) {
81+
return new MeterRegistryCloser(context, properties.isUseGlobalRegistry());
8182
}
8283

8384
@Bean
@@ -103,15 +104,21 @@ static class MeterRegistryCloser implements ApplicationListener<ContextClosedEve
103104

104105
private final Iterable<MeterRegistry> meterRegistries;
105106

106-
MeterRegistryCloser(ApplicationContext context) {
107+
private final boolean useGlobalRegistry;
108+
109+
MeterRegistryCloser(ApplicationContext context, boolean useGlobalRegistry) {
107110
this.meterRegistries = context.getBeansOfType(MeterRegistry.class).values();
108111
this.context = context;
112+
this.useGlobalRegistry = useGlobalRegistry;
109113
}
110114

111115
@Override
112116
public void onApplicationEvent(ContextClosedEvent event) {
113117
if (this.context.equals(event.getApplicationContext())) {
114118
for (MeterRegistry meterRegistry : this.meterRegistries) {
119+
if (this.useGlobalRegistry) {
120+
Metrics.globalRegistry.remove(meterRegistry);
121+
}
115122
if (!meterRegistry.isClosed()) {
116123
meterRegistry.close();
117124
}

module/spring-boot-micrometer-metrics/src/test/java/org/springframework/boot/micrometer/metrics/autoconfigure/MetricsAutoConfigurationTests.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import io.micrometer.core.instrument.Clock;
2020
import io.micrometer.core.instrument.Counter;
2121
import io.micrometer.core.instrument.MeterRegistry;
22+
import io.micrometer.core.instrument.Metrics;
2223
import io.micrometer.core.instrument.binder.MeterBinder;
2324
import io.micrometer.core.instrument.config.MeterFilter;
2425
import io.micrometer.core.instrument.config.MeterFilterReply;
@@ -96,6 +97,33 @@ void meterRegistryCloserShouldCloseRegistryOnShutdown() {
9697
});
9798
}
9899

100+
@Test
101+
void meterRegistryCloserShouldRemoveRegistryFromGlobalRegistryOnShutdown() {
102+
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class).run((context) -> {
103+
MeterRegistry meterRegistry = context.getBean(MeterRegistry.class);
104+
assertThat(Metrics.globalRegistry.getRegistries()).contains(meterRegistry);
105+
context.close();
106+
assertThat(Metrics.globalRegistry.getRegistries()).doesNotContain(meterRegistry);
107+
});
108+
}
109+
110+
@Test
111+
void meterRegistryCloserShouldNotRemoveRegistryFromGlobalRegistryWhenUseGlobalRegistryIsFalse() {
112+
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class)
113+
.withPropertyValues("management.metrics.use-global-registry=false")
114+
.run((context) -> {
115+
MeterRegistry meterRegistry = context.getBean(MeterRegistry.class);
116+
Metrics.globalRegistry.add(meterRegistry);
117+
try {
118+
context.close();
119+
assertThat(Metrics.globalRegistry.getRegistries()).contains(meterRegistry);
120+
}
121+
finally {
122+
Metrics.globalRegistry.remove(meterRegistry);
123+
}
124+
});
125+
}
126+
99127
@Test
100128
void meterRegistryCloserShouldOnlyCloseRegistriesBelongingToContextBeingClosed() {
101129
MeterRegistry parentMeterRegistry = new SimpleMeterRegistry();

0 commit comments

Comments
 (0)