diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java index 4e3f4be5c16..92d005e7c5e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/MetricsAutoConfiguration.java @@ -79,8 +79,11 @@ public class MetricsAutoConfiguration { @Bean @ConditionalOnMissingBean(MeterRegistry.class) public CompositeMeterRegistry compositeMeterRegistry( - ObjectProvider> exporters) { + ObjectProvider> exporters, + ObjectProvider> configurers) { CompositeMeterRegistry composite = new CompositeMeterRegistry(); + configurers.getIfAvailable(Collections::emptyList) + .forEach((configurer) -> configurer.configureRegistry(composite)); exporters.getIfAvailable(Collections::emptyList).stream() .map(MetricsExporter::registry).forEach(composite::add); return composite; @@ -119,11 +122,8 @@ public class MetricsAutoConfiguration { static class MeterRegistryConfigurationSupport { MeterRegistryConfigurationSupport(MeterRegistry registry, - ObjectProvider> configurers, MetricsProperties config, ObjectProvider> binders) { - configurers.getIfAvailable(Collections::emptyList) - .forEach((configurer) -> configurer.configureRegistry(registry)); binders.getIfAvailable(Collections::emptyList) .forEach((binder) -> binder.bindTo(registry)); if (config.isUseGlobalRegistry()) { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MeterRegistryConfigurerTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MeterRegistryConfigurerTests.java index 3c21c63cbff..1f3cfa6c0ad 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MeterRegistryConfigurerTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/MeterRegistryConfigurerTests.java @@ -46,6 +46,18 @@ public class MeterRegistryConfigurerTests { .isPresent()); } + @Test + public void commonTagsAreAppliedBeforeRegistryIsInjectableElsewhere() { + new ApplicationContextRunner() + .withConfiguration(AutoConfigurations.of(MetricsAutoConfiguration.class)) + .withConfiguration( + UserConfigurations.of(MeterRegistryConfigurerConfiguration.class)) + .withPropertyValues("metrics.use-global-registry=false") + .run((context) -> assertThat(context.getBean(MeterRegistry.class) + .find("my.thing").tags("region", "us-east-1").gauge()) + .isPresent()); + } + static class MeterRegistryConfigurerConfiguration { @Bean @@ -53,6 +65,14 @@ public class MeterRegistryConfigurerTests { return (registry) -> registry.config().commonTags("region", "us-east-1"); } + private class MyThing {} + + @Bean + public MyThing myThing(MeterRegistry registry) { + registry.gauge("my.thing", 0); + return new MyThing(); + } + } }