Browse Source

Merge branch '3.5.x'

Closes gh-48325
pull/46766/merge
Andy Wilkinson 3 weeks ago
parent
commit
7946f0e831
  1. 24
      module/spring-boot-micrometer-metrics/src/main/java/org/springframework/boot/micrometer/metrics/autoconfigure/MetricsAutoConfiguration.java
  2. 19
      module/spring-boot-micrometer-metrics/src/test/java/org/springframework/boot/micrometer/metrics/autoconfigure/MetricsAutoConfigurationTests.java

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

@ -16,8 +16,6 @@
package org.springframework.boot.micrometer.metrics.autoconfigure; package org.springframework.boot.micrometer.metrics.autoconfigure;
import java.util.List;
import io.micrometer.core.annotation.Timed; import io.micrometer.core.annotation.Timed;
import io.micrometer.core.instrument.Clock; import io.micrometer.core.instrument.Clock;
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.MeterRegistry;
@ -47,6 +45,7 @@ import org.springframework.core.annotation.Order;
* @author Jon Schneider * @author Jon Schneider
* @author Stephane Nicoll * @author Stephane Nicoll
* @author Moritz Halbritter * @author Moritz Halbritter
* @author Michael Berry
* @author Phillip Webb * @author Phillip Webb
* @since 4.0.0 * @since 4.0.0
*/ */
@ -77,8 +76,8 @@ public final class MetricsAutoConfiguration {
} }
@Bean @Bean
MeterRegistryCloser meterRegistryCloser(ObjectProvider<MeterRegistry> meterRegistries) { MeterRegistryCloser meterRegistryCloser(ApplicationContext context) {
return new MeterRegistryCloser(meterRegistries.orderedStream().toList()); return new MeterRegistryCloser(context);
} }
@Bean @Bean
@ -100,17 +99,22 @@ public final class MetricsAutoConfiguration {
*/ */
static class MeterRegistryCloser implements ApplicationListener<ContextClosedEvent> { static class MeterRegistryCloser implements ApplicationListener<ContextClosedEvent> {
private final List<MeterRegistry> meterRegistries; private final ApplicationContext context;
private final Iterable<MeterRegistry> meterRegistries;
MeterRegistryCloser(List<MeterRegistry> meterRegistries) { MeterRegistryCloser(ApplicationContext context) {
this.meterRegistries = meterRegistries; this.meterRegistries = context.getBeansOfType(MeterRegistry.class).values();
this.context = context;
} }
@Override @Override
public void onApplicationEvent(ContextClosedEvent event) { public void onApplicationEvent(ContextClosedEvent event) {
for (MeterRegistry meterRegistry : this.meterRegistries) { if (this.context.equals(event.getApplicationContext())) {
if (!meterRegistry.isClosed()) { for (MeterRegistry meterRegistry : this.meterRegistries) {
meterRegistry.close(); if (!meterRegistry.isClosed()) {
meterRegistry.close();
}
} }
} }
} }

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

@ -46,6 +46,7 @@ import static org.mockito.Mockito.mock;
* *
* @author Andy Wilkinson * @author Andy Wilkinson
* @author Moritz Halbritter * @author Moritz Halbritter
* @author Michael Berry
* @author Phillip Webb * @author Phillip Webb
*/ */
class MetricsAutoConfigurationTests { class MetricsAutoConfigurationTests {
@ -95,6 +96,24 @@ class MetricsAutoConfigurationTests {
}); });
} }
@Test
void meterRegistryCloserShouldOnlyCloseRegistriesBelongingToContextBeingClosed() {
MeterRegistry parentMeterRegistry = new SimpleMeterRegistry();
MeterRegistry childMeterRegistry = new SimpleMeterRegistry();
this.contextRunner.withBean(MeterRegistry.class, () -> parentMeterRegistry).run((parent) -> {
this.contextRunner.withBean(MeterRegistry.class, () -> childMeterRegistry)
.withParent(parent)
.run((child) -> {
assertThat(childMeterRegistry.isClosed()).isFalse();
assertThat(parentMeterRegistry.isClosed()).isFalse();
});
assertThat(childMeterRegistry.isClosed()).isTrue();
assertThat(parentMeterRegistry.isClosed()).isFalse();
});
assertThat(childMeterRegistry.isClosed()).isTrue();
assertThat(parentMeterRegistry.isClosed()).isTrue();
}
@Test @Test
void supplyHandlerAndGroup() { void supplyHandlerAndGroup() {
this.contextRunner.run((context) -> { this.contextRunner.run((context) -> {

Loading…
Cancel
Save