mirror of
https://github.com/spring-projects/spring-boot.git
synced 2026-09-17 12:09:16 +00:00
Merge branch '4.0.x'
Closes gh-50287
This commit is contained in:
+10
-3
@@ -19,6 +19,7 @@ package org.springframework.boot.micrometer.metrics.autoconfigure;
|
||||
import io.micrometer.core.annotation.Timed;
|
||||
import io.micrometer.core.instrument.Clock;
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
||||
import io.micrometer.core.instrument.composite.CompositeMeterRegistry;
|
||||
import io.micrometer.core.instrument.config.MeterFilter;
|
||||
@@ -76,8 +77,8 @@ public final class MetricsAutoConfiguration {
|
||||
}
|
||||
|
||||
@Bean
|
||||
MeterRegistryCloser meterRegistryCloser(ApplicationContext context) {
|
||||
return new MeterRegistryCloser(context);
|
||||
MeterRegistryCloser meterRegistryCloser(ApplicationContext context, MetricsProperties properties) {
|
||||
return new MeterRegistryCloser(context, properties.isUseGlobalRegistry());
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -103,15 +104,21 @@ public final class MetricsAutoConfiguration {
|
||||
|
||||
private final Iterable<MeterRegistry> meterRegistries;
|
||||
|
||||
MeterRegistryCloser(ApplicationContext context) {
|
||||
private final boolean useGlobalRegistry;
|
||||
|
||||
MeterRegistryCloser(ApplicationContext context, boolean useGlobalRegistry) {
|
||||
this.meterRegistries = context.getBeansOfType(MeterRegistry.class).values();
|
||||
this.context = context;
|
||||
this.useGlobalRegistry = useGlobalRegistry;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onApplicationEvent(ContextClosedEvent event) {
|
||||
if (this.context.equals(event.getApplicationContext())) {
|
||||
for (MeterRegistry meterRegistry : this.meterRegistries) {
|
||||
if (this.useGlobalRegistry) {
|
||||
Metrics.globalRegistry.remove(meterRegistry);
|
||||
}
|
||||
if (!meterRegistry.isClosed()) {
|
||||
meterRegistry.close();
|
||||
}
|
||||
|
||||
+28
@@ -19,6 +19,7 @@ package org.springframework.boot.micrometer.metrics.autoconfigure;
|
||||
import io.micrometer.core.instrument.Clock;
|
||||
import io.micrometer.core.instrument.Counter;
|
||||
import io.micrometer.core.instrument.MeterRegistry;
|
||||
import io.micrometer.core.instrument.Metrics;
|
||||
import io.micrometer.core.instrument.binder.MeterBinder;
|
||||
import io.micrometer.core.instrument.config.MeterFilter;
|
||||
import io.micrometer.core.instrument.config.MeterFilterReply;
|
||||
@@ -96,6 +97,33 @@ class MetricsAutoConfigurationTests {
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void meterRegistryCloserShouldRemoveRegistryFromGlobalRegistryOnShutdown() {
|
||||
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class).run((context) -> {
|
||||
MeterRegistry meterRegistry = context.getBean(MeterRegistry.class);
|
||||
assertThat(Metrics.globalRegistry.getRegistries()).contains(meterRegistry);
|
||||
context.close();
|
||||
assertThat(Metrics.globalRegistry.getRegistries()).doesNotContain(meterRegistry);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void meterRegistryCloserShouldNotRemoveRegistryFromGlobalRegistryWhenUseGlobalRegistryIsFalse() {
|
||||
this.contextRunner.withUserConfiguration(MeterRegistryConfiguration.class)
|
||||
.withPropertyValues("management.metrics.use-global-registry=false")
|
||||
.run((context) -> {
|
||||
MeterRegistry meterRegistry = context.getBean(MeterRegistry.class);
|
||||
Metrics.globalRegistry.add(meterRegistry);
|
||||
try {
|
||||
context.close();
|
||||
assertThat(Metrics.globalRegistry.getRegistries()).contains(meterRegistry);
|
||||
}
|
||||
finally {
|
||||
Metrics.globalRegistry.remove(meterRegistry);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
void meterRegistryCloserShouldOnlyCloseRegistriesBelongingToContextBeingClosed() {
|
||||
MeterRegistry parentMeterRegistry = new SimpleMeterRegistry();
|
||||
|
||||
Reference in New Issue
Block a user