From fc2a605295e34af2244864df5a7dcb2017ed16f6 Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 20 May 2025 11:04:13 +0100 Subject: [PATCH] Move MongoDB metrics auto-configuration into spring-boot-mongodb See gh-46114 --- .../build.gradle | 2 -- ...ot.autoconfigure.AutoConfiguration.imports | 1 - .../spring-boot-mongodb/build.gradle | 1 + .../MongoMetricsAutoConfiguration.java | 10 ++++---- .../metrics/autoconfigure}/package-info.java | 4 ++-- ...ot.autoconfigure.AutoConfiguration.imports | 1 + .../MongoMetricsAutoConfigurationTests.java | 24 +++++++++---------- 7 files changed, 20 insertions(+), 23 deletions(-) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo => spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure}/MongoMetricsAutoConfiguration.java (91%) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo => spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure}/package-info.java (84%) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo => spring-boot-mongodb/src/test/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure}/MongoMetricsAutoConfigurationTests.java (92%) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle b/spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle index e27a4db0ad8..5ec3c182b8d 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle +++ b/spring-boot-project/spring-boot-actuator-autoconfigure-all/build.gradle @@ -59,7 +59,6 @@ dependencies { optional(project(":spring-boot-project:spring-boot-jsonb")) optional(project(":spring-boot-project:spring-boot-kafka")) optional(project(":spring-boot-project:spring-boot-metrics")) - optional(project(":spring-boot-project:spring-boot-mongodb")) optional(project(":spring-boot-project:spring-boot-r2dbc")) optional(project(":spring-boot-project:spring-boot-reactor-netty")) optional(project(":spring-boot-project:spring-boot-restclient")) @@ -147,7 +146,6 @@ dependencies { optional("org.springframework.batch:spring-batch-core") optional("org.springframework.data:spring-data-couchbase") optional("org.springframework.data:spring-data-jpa") - optional("org.springframework.data:spring-data-mongodb") optional("org.springframework.data:spring-data-redis") optional("org.springframework.graphql:spring-graphql") optional("org.springframework.kafka:spring-kafka") diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index df34cb73544..3f276354650 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -41,7 +41,6 @@ org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetri org.springframework.boot.actuate.autoconfigure.metrics.export.stackdriver.StackdriverMetricsExportAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.export.statsd.StatsdMetricsExportAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.jersey.JerseyServerMetricsAutoConfiguration -org.springframework.boot.actuate.autoconfigure.metrics.mongo.MongoMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.r2dbc.ConnectionPoolMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration diff --git a/spring-boot-project/spring-boot-mongodb/build.gradle b/spring-boot-project/spring-boot-mongodb/build.gradle index 1be3a145e44..b46001bc317 100644 --- a/spring-boot-project/spring-boot-mongodb/build.gradle +++ b/spring-boot-project/spring-boot-mongodb/build.gradle @@ -31,6 +31,7 @@ dependencies { optional(project(":spring-boot-project:spring-boot-autoconfigure")) optional(project(":spring-boot-project:spring-boot-docker-compose")) + optional(project(":spring-boot-project:spring-boot-metrics")) optional(project(":spring-boot-project:spring-boot-reactor")) optional(project(":spring-boot-project:spring-boot-testcontainers")) optional("io.netty:netty-transport") diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/MongoMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/MongoMetricsAutoConfiguration.java similarity index 91% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/MongoMetricsAutoConfiguration.java rename to spring-boot-project/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/MongoMetricsAutoConfiguration.java index 49ac6b2b4ab..942c5f19624 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/MongoMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/MongoMetricsAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.metrics.mongo; +package org.springframework.boot.mongodb.actuate.metrics.autoconfigure; import com.mongodb.MongoClientSettings; import io.micrometer.core.instrument.MeterRegistry; @@ -31,8 +31,6 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnBooleanProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; -import org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration; -import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; import org.springframework.boot.mongodb.autoconfigure.MongoClientSettingsBuilderCustomizer; import org.springframework.context.annotation.Bean; @@ -42,11 +40,11 @@ import org.springframework.context.annotation.Bean; * * @author Chris Bono * @author Jonatan Ivanov - * @since 2.5.0 + * @since 4.0.0 */ @AutoConfiguration(before = MongoAutoConfiguration.class, - after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class }) -@ConditionalOnClass(MongoClientSettings.class) + afterName = "org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration") +@ConditionalOnClass({ MongoClientSettings.class, MeterRegistry.class }) @ConditionalOnBean(MeterRegistry.class) public class MongoMetricsAutoConfiguration { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/package-info.java b/spring-boot-project/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/package-info.java similarity index 84% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/package-info.java rename to spring-boot-project/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/package-info.java index 4253e534037..a7b55d7b503 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/package-info.java +++ b/spring-boot-project/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for Mongo metrics. + * Auto-configuration for MongoDB metrics. */ -package org.springframework.boot.actuate.autoconfigure.metrics.mongo; +package org.springframework.boot.mongodb.actuate.metrics.autoconfigure; diff --git a/spring-boot-project/spring-boot-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 2d51342afe6..effc4fb737f 100644 --- a/spring-boot-project/spring-boot-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-mongodb/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1,2 +1,3 @@ +org.springframework.boot.mongodb.actuate.metrics.autoconfigure.MongoMetricsAutoConfiguration org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/MongoMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-mongodb/src/test/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/MongoMetricsAutoConfigurationTests.java similarity index 92% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/MongoMetricsAutoConfigurationTests.java rename to spring-boot-project/spring-boot-mongodb/src/test/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/MongoMetricsAutoConfigurationTests.java index 3ce101a9beb..54a51f3d77b 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/mongo/MongoMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-mongodb/src/test/java/org/springframework/boot/mongodb/actuate/metrics/autoconfigure/MongoMetricsAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.metrics.mongo; +package org.springframework.boot.mongodb.actuate.metrics.autoconfigure; import java.util.List; @@ -29,10 +29,10 @@ import io.micrometer.core.instrument.binder.mongodb.MongoCommandTagsProvider; import io.micrometer.core.instrument.binder.mongodb.MongoConnectionPoolTagsProvider; import io.micrometer.core.instrument.binder.mongodb.MongoMetricsCommandListener; import io.micrometer.core.instrument.binder.mongodb.MongoMetricsConnectionPoolListener; +import io.micrometer.core.instrument.simple.SimpleMeterRegistry; import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.Test; -import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; import org.springframework.boot.test.context.FilteredClassLoader; @@ -57,7 +57,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsAMeterRegistryThenMetricsCommandListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .run((context) -> { assertThat(context).hasSingleBean(MongoMetricsCommandListener.class); @@ -72,7 +72,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsAMeterRegistryThenMetricsConnectionPoolListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .run((context) -> { assertThat(context).hasSingleBean(MongoMetricsConnectionPoolListener.class); @@ -98,7 +98,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsACustomMetricsCommandTagsProviderItIsUsed() { final MongoCommandTagsProvider customTagsProvider = mock(MongoCommandTagsProvider.class); - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withBean("customMongoCommandTagsProvider", MongoCommandTagsProvider.class, () -> customTagsProvider) .run((context) -> assertThat(getMongoCommandTagsProviderUsedToConstructListener(context)) @@ -108,7 +108,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsACustomMetricsConnectionPoolTagsProviderItIsUsed() { final MongoConnectionPoolTagsProvider customTagsProvider = mock(MongoConnectionPoolTagsProvider.class); - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withBean("customMongoConnectionPoolTagsProvider", MongoConnectionPoolTagsProvider.class, () -> customTagsProvider) @@ -118,7 +118,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsNoMongoClientSettingsOnClasspathThenNoMetricsCommandListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(MongoClientSettings.class)) .run(assertThatMetricsCommandListenerNotAdded()); @@ -126,7 +126,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsNoMongoClientSettingsOnClasspathThenNoMetricsConnectionPoolListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(MongoClientSettings.class)) .run(assertThatMetricsConnectionPoolListenerNotAdded()); @@ -134,7 +134,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsNoMongoMetricsCommandListenerOnClasspathThenNoMetricsCommandListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(MongoMetricsCommandListener.class)) .run(assertThatMetricsCommandListenerNotAdded()); @@ -142,7 +142,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenThereIsNoMongoMetricsConnectionPoolListenerOnClasspathThenNoMetricsConnectionPoolListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withClassLoader(new FilteredClassLoader(MongoMetricsConnectionPoolListener.class)) .run(assertThatMetricsConnectionPoolListenerNotAdded()); @@ -150,7 +150,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenMetricsCommandListenerEnabledPropertyFalseThenNoMetricsCommandListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withPropertyValues("management.metrics.mongo.command.enabled:false") .run(assertThatMetricsCommandListenerNotAdded()); @@ -158,7 +158,7 @@ class MongoMetricsAutoConfigurationTests { @Test void whenMetricsConnectionPoolListenerEnabledPropertyFalseThenNoMetricsConnectionPoolListenerIsAdded() { - this.contextRunner.with(MetricsRun.simple()) + this.contextRunner.withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withPropertyValues("management.metrics.mongo.connectionpool.enabled:false") .run(assertThatMetricsConnectionPoolListenerNotAdded());