Move MongoDB metrics auto-configuration into spring-boot-mongodb

See gh-46114
This commit is contained in:
Andy Wilkinson 2025-05-20 11:04:13 +01:00
parent 864ab740e5
commit fc2a605295
7 changed files with 20 additions and 23 deletions

View File

@ -59,7 +59,6 @@ dependencies {
optional(project(":spring-boot-project:spring-boot-jsonb")) optional(project(":spring-boot-project:spring-boot-jsonb"))
optional(project(":spring-boot-project:spring-boot-kafka")) optional(project(":spring-boot-project:spring-boot-kafka"))
optional(project(":spring-boot-project:spring-boot-metrics")) 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-r2dbc"))
optional(project(":spring-boot-project:spring-boot-reactor-netty")) optional(project(":spring-boot-project:spring-boot-reactor-netty"))
optional(project(":spring-boot-project:spring-boot-restclient")) optional(project(":spring-boot-project:spring-boot-restclient"))
@ -147,7 +146,6 @@ dependencies {
optional("org.springframework.batch:spring-batch-core") optional("org.springframework.batch:spring-batch-core")
optional("org.springframework.data:spring-data-couchbase") optional("org.springframework.data:spring-data-couchbase")
optional("org.springframework.data:spring-data-jpa") optional("org.springframework.data:spring-data-jpa")
optional("org.springframework.data:spring-data-mongodb")
optional("org.springframework.data:spring-data-redis") optional("org.springframework.data:spring-data-redis")
optional("org.springframework.graphql:spring-graphql") optional("org.springframework.graphql:spring-graphql")
optional("org.springframework.kafka:spring-kafka") optional("org.springframework.kafka:spring-kafka")

View File

@ -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.stackdriver.StackdriverMetricsExportAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.export.statsd.StatsdMetricsExportAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.export.statsd.StatsdMetricsExportAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.jersey.JerseyServerMetricsAutoConfiguration 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.orm.jpa.HibernateMetricsAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.r2dbc.ConnectionPoolMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.r2dbc.ConnectionPoolMetricsAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.redis.LettuceMetricsAutoConfiguration

View File

@ -31,6 +31,7 @@ dependencies {
optional(project(":spring-boot-project:spring-boot-autoconfigure")) optional(project(":spring-boot-project:spring-boot-autoconfigure"))
optional(project(":spring-boot-project:spring-boot-docker-compose")) 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-reactor"))
optional(project(":spring-boot-project:spring-boot-testcontainers")) optional(project(":spring-boot-project:spring-boot-testcontainers"))
optional("io.netty:netty-transport") optional("io.netty:netty-transport")

View File

@ -14,7 +14,7 @@
* limitations under the License. * 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 com.mongodb.MongoClientSettings;
import io.micrometer.core.instrument.MeterRegistry; 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.ConditionalOnBooleanProperty;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; 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.MongoAutoConfiguration;
import org.springframework.boot.mongodb.autoconfigure.MongoClientSettingsBuilderCustomizer; import org.springframework.boot.mongodb.autoconfigure.MongoClientSettingsBuilderCustomizer;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -42,11 +40,11 @@ import org.springframework.context.annotation.Bean;
* *
* @author Chris Bono * @author Chris Bono
* @author Jonatan Ivanov * @author Jonatan Ivanov
* @since 2.5.0 * @since 4.0.0
*/ */
@AutoConfiguration(before = MongoAutoConfiguration.class, @AutoConfiguration(before = MongoAutoConfiguration.class,
after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class }) afterName = "org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration")
@ConditionalOnClass(MongoClientSettings.class) @ConditionalOnClass({ MongoClientSettings.class, MeterRegistry.class })
@ConditionalOnBean(MeterRegistry.class) @ConditionalOnBean(MeterRegistry.class)
public class MongoMetricsAutoConfiguration { public class MongoMetricsAutoConfiguration {

View File

@ -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;

View File

@ -1,2 +1,3 @@
org.springframework.boot.mongodb.actuate.metrics.autoconfigure.MongoMetricsAutoConfiguration
org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration
org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration org.springframework.boot.mongodb.autoconfigure.MongoReactiveAutoConfiguration

View File

@ -14,7 +14,7 @@
* limitations under the License. * limitations under the License.
*/ */
package org.springframework.boot.actuate.autoconfigure.metrics.mongo; package org.springframework.boot.mongodb.actuate.metrics.autoconfigure;
import java.util.List; 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.MongoConnectionPoolTagsProvider;
import io.micrometer.core.instrument.binder.mongodb.MongoMetricsCommandListener; import io.micrometer.core.instrument.binder.mongodb.MongoMetricsCommandListener;
import io.micrometer.core.instrument.binder.mongodb.MongoMetricsConnectionPoolListener; import io.micrometer.core.instrument.binder.mongodb.MongoMetricsConnectionPoolListener;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.assertj.core.api.InstanceOfAssertFactories; import org.assertj.core.api.InstanceOfAssertFactories;
import org.junit.jupiter.api.Test; 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.autoconfigure.AutoConfigurations;
import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration; import org.springframework.boot.mongodb.autoconfigure.MongoAutoConfiguration;
import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.FilteredClassLoader;
@ -57,7 +57,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsAMeterRegistryThenMetricsCommandListenerIsAdded() { void whenThereIsAMeterRegistryThenMetricsCommandListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(MongoMetricsCommandListener.class); assertThat(context).hasSingleBean(MongoMetricsCommandListener.class);
@ -72,7 +72,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsAMeterRegistryThenMetricsConnectionPoolListenerIsAdded() { void whenThereIsAMeterRegistryThenMetricsConnectionPoolListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.run((context) -> { .run((context) -> {
assertThat(context).hasSingleBean(MongoMetricsConnectionPoolListener.class); assertThat(context).hasSingleBean(MongoMetricsConnectionPoolListener.class);
@ -98,7 +98,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsACustomMetricsCommandTagsProviderItIsUsed() { void whenThereIsACustomMetricsCommandTagsProviderItIsUsed() {
final MongoCommandTagsProvider customTagsProvider = mock(MongoCommandTagsProvider.class); final MongoCommandTagsProvider customTagsProvider = mock(MongoCommandTagsProvider.class);
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withBean("customMongoCommandTagsProvider", MongoCommandTagsProvider.class, () -> customTagsProvider) .withBean("customMongoCommandTagsProvider", MongoCommandTagsProvider.class, () -> customTagsProvider)
.run((context) -> assertThat(getMongoCommandTagsProviderUsedToConstructListener(context)) .run((context) -> assertThat(getMongoCommandTagsProviderUsedToConstructListener(context))
@ -108,7 +108,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsACustomMetricsConnectionPoolTagsProviderItIsUsed() { void whenThereIsACustomMetricsConnectionPoolTagsProviderItIsUsed() {
final MongoConnectionPoolTagsProvider customTagsProvider = mock(MongoConnectionPoolTagsProvider.class); final MongoConnectionPoolTagsProvider customTagsProvider = mock(MongoConnectionPoolTagsProvider.class);
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withBean("customMongoConnectionPoolTagsProvider", MongoConnectionPoolTagsProvider.class, .withBean("customMongoConnectionPoolTagsProvider", MongoConnectionPoolTagsProvider.class,
() -> customTagsProvider) () -> customTagsProvider)
@ -118,7 +118,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsNoMongoClientSettingsOnClasspathThenNoMetricsCommandListenerIsAdded() { void whenThereIsNoMongoClientSettingsOnClasspathThenNoMetricsCommandListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(MongoClientSettings.class)) .withClassLoader(new FilteredClassLoader(MongoClientSettings.class))
.run(assertThatMetricsCommandListenerNotAdded()); .run(assertThatMetricsCommandListenerNotAdded());
@ -126,7 +126,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsNoMongoClientSettingsOnClasspathThenNoMetricsConnectionPoolListenerIsAdded() { void whenThereIsNoMongoClientSettingsOnClasspathThenNoMetricsConnectionPoolListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(MongoClientSettings.class)) .withClassLoader(new FilteredClassLoader(MongoClientSettings.class))
.run(assertThatMetricsConnectionPoolListenerNotAdded()); .run(assertThatMetricsConnectionPoolListenerNotAdded());
@ -134,7 +134,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsNoMongoMetricsCommandListenerOnClasspathThenNoMetricsCommandListenerIsAdded() { void whenThereIsNoMongoMetricsCommandListenerOnClasspathThenNoMetricsCommandListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(MongoMetricsCommandListener.class)) .withClassLoader(new FilteredClassLoader(MongoMetricsCommandListener.class))
.run(assertThatMetricsCommandListenerNotAdded()); .run(assertThatMetricsCommandListenerNotAdded());
@ -142,7 +142,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenThereIsNoMongoMetricsConnectionPoolListenerOnClasspathThenNoMetricsConnectionPoolListenerIsAdded() { void whenThereIsNoMongoMetricsConnectionPoolListenerOnClasspathThenNoMetricsConnectionPoolListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withClassLoader(new FilteredClassLoader(MongoMetricsConnectionPoolListener.class)) .withClassLoader(new FilteredClassLoader(MongoMetricsConnectionPoolListener.class))
.run(assertThatMetricsConnectionPoolListenerNotAdded()); .run(assertThatMetricsConnectionPoolListenerNotAdded());
@ -150,7 +150,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenMetricsCommandListenerEnabledPropertyFalseThenNoMetricsCommandListenerIsAdded() { void whenMetricsCommandListenerEnabledPropertyFalseThenNoMetricsCommandListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withPropertyValues("management.metrics.mongo.command.enabled:false") .withPropertyValues("management.metrics.mongo.command.enabled:false")
.run(assertThatMetricsCommandListenerNotAdded()); .run(assertThatMetricsCommandListenerNotAdded());
@ -158,7 +158,7 @@ class MongoMetricsAutoConfigurationTests {
@Test @Test
void whenMetricsConnectionPoolListenerEnabledPropertyFalseThenNoMetricsConnectionPoolListenerIsAdded() { void whenMetricsConnectionPoolListenerEnabledPropertyFalseThenNoMetricsConnectionPoolListenerIsAdded() {
this.contextRunner.with(MetricsRun.simple()) this.contextRunner.withBean(SimpleMeterRegistry.class)
.withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class)) .withConfiguration(AutoConfigurations.of(MongoAutoConfiguration.class))
.withPropertyValues("management.metrics.mongo.connectionpool.enabled:false") .withPropertyValues("management.metrics.mongo.connectionpool.enabled:false")
.run(assertThatMetricsConnectionPoolListenerNotAdded()); .run(assertThatMetricsConnectionPoolListenerNotAdded());