From 9b4d5dcedf8a4bdf270d728c8d936f7d8e38521a Mon Sep 17 00:00:00 2001 From: Andy Wilkinson Date: Tue, 20 May 2025 16:40:02 +0100 Subject: [PATCH] Move Hibernate metrics auto-config into spring-boot-jpa --- ...ework.boot.autoconfigure.AutoConfiguration.imports | 1 - .../metrics/test/MetricsIntegrationTests.java | 2 +- spring-boot-project/spring-boot-jpa/build.gradle | 3 ++- .../HibernateMetricsAutoConfiguration.java | 9 ++++----- .../actuate/metrics/autoconfigure}/package-info.java | 4 ++-- ...ework.boot.autoconfigure.AutoConfiguration.imports | 1 + .../HibernateMetricsAutoConfigurationTests.java | 11 ++++++----- 7 files changed, 16 insertions(+), 15 deletions(-) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa => spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure}/HibernateMetricsAutoConfiguration.java (89%) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa => spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure}/package-info.java (83%) rename spring-boot-project/{spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa => spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure}/HibernateMetricsAutoConfigurationTests.java (96%) 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 97b0d88b26..79512fb199 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 @@ -37,7 +37,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.orm.jpa.HibernateMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.r2dbc.ConnectionPoolMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.task.TaskExecutorMetricsAutoConfiguration org.springframework.boot.actuate.autoconfigure.metrics.web.jetty.JettyMetricsAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java index 07344d2065..3829aed899 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/test/MetricsIntegrationTests.java @@ -34,7 +34,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa.HibernateMetricsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.observation.ObservationAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.observation.web.client.HttpClientObservationsAutoConfiguration; import org.springframework.boot.actuate.autoconfigure.observation.web.reactive.WebFluxObservationAutoConfiguration; @@ -43,6 +42,7 @@ import org.springframework.boot.autoconfigure.ImportAutoConfiguration; import org.springframework.boot.http.converter.autoconfigure.HttpMessageConvertersAutoConfiguration; import org.springframework.boot.jackson.autoconfigure.JacksonAutoConfiguration; import org.springframework.boot.jdbc.actuate.metrics.autoconfigure.DataSourcePoolMetricsAutoConfiguration; +import org.springframework.boot.jpa.hibernate.actuate.metrics.autoconfigure.HibernateMetricsAutoConfiguration; import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; import org.springframework.boot.metrics.autoconfigure.jvm.JvmMetricsAutoConfiguration; import org.springframework.boot.metrics.autoconfigure.logging.logback.LogbackMetricsAutoConfiguration; diff --git a/spring-boot-project/spring-boot-jpa/build.gradle b/spring-boot-project/spring-boot-jpa/build.gradle index 01d8ad2f36..aab15d4bcf 100644 --- a/spring-boot-project/spring-boot-jpa/build.gradle +++ b/spring-boot-project/spring-boot-jpa/build.gradle @@ -16,8 +16,9 @@ dependencies { api("org.springframework:spring-orm") optional(project(":spring-boot-project:spring-boot-autoconfigure")) - optional(project(":spring-boot-project:spring-boot-jdbc")) + optional(project(":spring-boot-project:spring-boot-metrics")) optional("jakarta.servlet:jakarta.servlet-api") + optional("org.hibernate.orm:hibernate-micrometer") optional("org.springframework:spring-webmvc") testImplementation(project(":spring-boot-project:spring-boot-flyway")) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfiguration.java b/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/HibernateMetricsAutoConfiguration.java similarity index 89% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfiguration.java rename to spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/HibernateMetricsAutoConfiguration.java index 5398a2a288..e8c79ba73e 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfiguration.java +++ b/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/HibernateMetricsAutoConfiguration.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa; +package org.springframework.boot.jpa.hibernate.actuate.metrics.autoconfigure; import java.util.Collections; import java.util.Map; @@ -28,12 +28,11 @@ import org.hibernate.stat.HibernateMetrics; import org.springframework.beans.factory.SmartInitializingSingleton; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.beans.factory.support.SimpleAutowireCandidateResolver; -import org.springframework.boot.actuate.autoconfigure.metrics.export.simple.SimpleMetricsExportAutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; -import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; +import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; import org.springframework.util.StringUtils; /** @@ -44,8 +43,8 @@ import org.springframework.util.StringUtils; * @author Stephane Nicoll * @since 2.1.0 */ -@AutoConfiguration(after = { MetricsAutoConfiguration.class, SimpleMetricsExportAutoConfiguration.class }, - afterName = "org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration") +@AutoConfiguration(after = HibernateJpaAutoConfiguration.class, + afterName = "org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration") @ConditionalOnClass({ EntityManagerFactory.class, SessionFactory.class, HibernateMetrics.class, MeterRegistry.class }) @ConditionalOnBean({ EntityManagerFactory.class, MeterRegistry.class }) public class HibernateMetricsAutoConfiguration implements SmartInitializingSingleton { diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/package-info.java b/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/package-info.java similarity index 83% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/package-info.java rename to spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/package-info.java index fb1d62cba7..cfbb04f017 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/package-info.java +++ b/spring-boot-project/spring-boot-jpa/src/main/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/package-info.java @@ -15,6 +15,6 @@ */ /** - * Auto-configuration for JPA metrics. + * Auto-configuration for Hibernate metrics. */ -package org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa; +package org.springframework.boot.jpa.hibernate.actuate.metrics.autoconfigure; diff --git a/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports index 20bdc0cab9..05cd3c2975 100644 --- a/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ b/spring-boot-project/spring-boot-jpa/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports @@ -1 +1,2 @@ org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration +org.springframework.boot.jpa.hibernate.actuate.metrics.autoconfigure.HibernateMetricsAutoConfiguration diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java b/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/HibernateMetricsAutoConfigurationTests.java similarity index 96% rename from spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java rename to spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/HibernateMetricsAutoConfigurationTests.java index c4378acce8..d84bd704d0 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure-all/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/orm/jpa/HibernateMetricsAutoConfigurationTests.java +++ b/spring-boot-project/spring-boot-jpa/src/test/java/org/springframework/boot/jpa/hibernate/actuate/metrics/autoconfigure/HibernateMetricsAutoConfigurationTests.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.boot.actuate.autoconfigure.metrics.orm.jpa; +package org.springframework.boot.jpa.hibernate.actuate.metrics.autoconfigure; import java.util.Map; import java.util.function.Function; @@ -32,13 +32,13 @@ import org.hibernate.SessionFactory; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; -import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun; import org.springframework.boot.autoconfigure.AutoConfigurations; import org.springframework.boot.jdbc.autoconfigure.DataSourceAutoConfiguration; import org.springframework.boot.jdbc.autoconfigure.DataSourceInitializationAutoConfiguration; import org.springframework.boot.jpa.EntityManagerFactoryBuilder; import org.springframework.boot.jpa.autoconfigure.EntityManagerFactoryBuilderCustomizer; import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration; +import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration; import org.springframework.boot.test.context.FilteredClassLoader; import org.springframework.boot.test.context.runner.ApplicationContextRunner; import org.springframework.boot.testsupport.classpath.resources.WithResource; @@ -63,10 +63,11 @@ import static org.mockito.Mockito.mock; */ class HibernateMetricsAutoConfigurationTests { - private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().with(MetricsRun.simple()) + private final ApplicationContextRunner contextRunner = new ApplicationContextRunner() + .withBean(SimpleMeterRegistry.class) .withConfiguration(AutoConfigurations.of(DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, - HibernateMetricsAutoConfiguration.class)) - .withUserConfiguration(BaseConfiguration.class); + HibernateMetricsAutoConfiguration.class, MetricsAutoConfiguration.class)) + .withPropertyValues("management.metrics.use-global-registry=false"); @Test void autoConfiguredEntityManagerFactoryWithStatsIsInstrumented() {