Browse Source

Merge branch '3.4.x' into 3.5.x

Closes gh-48324
3.5.x
Andy Wilkinson 3 weeks ago
parent
commit
7f2ffca789
  1. 24
      spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java
  2. 19
      spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfigurationTests.java

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

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

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

@ -42,6 +42,7 @@ import static org.mockito.Mockito.mock; @@ -42,6 +42,7 @@ import static org.mockito.Mockito.mock;
*
* @author Andy Wilkinson
* @author Moritz Halbritter
* @author Michael Berry
*/
class MetricsAutoConfigurationTests {
@ -89,6 +90,24 @@ class MetricsAutoConfigurationTests { @@ -89,6 +90,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();
}
@Configuration(proxyBeanMethods = false)
static class CustomClockConfiguration {

Loading…
Cancel
Save