Move Spring Data repository metrics into spring-boot-data-commons

This commit is contained in:
Andy Wilkinson
2025-05-30 14:32:51 +01:00
committed by Phillip Webb
parent 3b58215093
commit b9aa01c1c4
24 changed files with 56 additions and 55 deletions

View File

@@ -94,8 +94,6 @@ dependencies {
optional("org.springframework:spring-messaging")
optional("org.springframework:spring-webflux")
optional("org.springframework:spring-webmvc")
optional("org.springframework.data:spring-data-couchbase")
optional("org.springframework.data:spring-data-jpa")
optional("org.springframework.kafka:spring-kafka")
optional("org.springframework.security:spring-security-config")
optional("org.springframework.security:spring-security-web")
@@ -126,7 +124,6 @@ dependencies {
testImplementation("org.glassfish.jersey.media:jersey-media-json-jackson")
testImplementation("org.hsqldb:hsqldb")
testImplementation("org.springframework:spring-orm")
testImplementation("org.springframework.data:spring-data-rest-webmvc")
testImplementation("org.springframework.security:spring-security-test")
testImplementation("org.yaml:snakeyaml")

View File

@@ -13,7 +13,6 @@ org.springframework.boot.actuate.autoconfigure.endpoint.jmx.JmxEndpointAutoConfi
org.springframework.boot.actuate.autoconfigure.env.EnvironmentEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.management.HeapDumpWebEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.management.ThreadDumpEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.metrics.data.RepositoryMetricsAutoConfiguration
org.springframework.boot.actuate.autoconfigure.observability.ObservabilityAutoConfiguration
org.springframework.boot.actuate.autoconfigure.sbom.SbomEndpointAutoConfiguration
org.springframework.boot.actuate.autoconfigure.scheduling.ScheduledTasksEndpointAutoConfiguration

View File

@@ -39,7 +39,6 @@ dependencies {
optional("org.springframework:spring-messaging")
optional("org.springframework:spring-webflux")
optional("org.springframework.graphql:spring-graphql")
optional("org.springframework.data:spring-data-rest-webmvc")
optional("org.springframework.security:spring-security-core")
optional("org.springframework.security:spring-security-web")

View File

@@ -14,6 +14,7 @@ dependencies {
optional(project(":spring-boot-project:spring-boot-autoconfigure"))
optional(project(":spring-boot-project:spring-boot-data-rest"))
optional(project(":spring-boot-project:spring-boot-metrics"))
testImplementation(project(":spring-boot-project:spring-boot-data-jpa"))
testImplementation(project(":spring-boot-project:spring-boot-test"))

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.util.Set;
import java.util.function.Consumer;
@@ -33,7 +33,7 @@ import org.springframework.util.CollectionUtils;
* @author Tadaya Tsuyukubo
* @author Stephane Nicoll
* @author Phillip Webb
* @since 2.2.0
* @since 4.0.0
*/
@FunctionalInterface
public interface AutoTimer {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.lang.reflect.Method;
import java.util.function.Function;
@@ -30,7 +30,7 @@ import org.springframework.util.StringUtils;
* Default {@link RepositoryTagsProvider} implementation.
*
* @author Phillip Webb
* @since 2.5.0
* @since 4.0.0
*/
public class DefaultRepositoryTagsProvider implements RepositoryTagsProvider {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.util.Set;
import java.util.concurrent.TimeUnit;
@@ -32,7 +32,7 @@ import org.springframework.util.function.SingletonSupplier;
* execution time and results.
*
* @author Phillip Webb
* @since 2.5.0
* @since 4.0.0
*/
public class MetricsRepositoryMethodInvocationListener implements RepositoryMethodInvocationListener {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import io.micrometer.core.instrument.Tag;
@@ -25,7 +25,7 @@ import org.springframework.data.repository.core.support.RepositoryMethodInvocati
* invocations}.
*
* @author Phillip Webb
* @since 2.5.0
* @since 4.0.0
*/
@FunctionalInterface
public interface RepositoryTagsProvider {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Method;
@@ -32,7 +32,7 @@ import org.springframework.util.ConcurrentReferenceHashMap;
* Utility used to obtain {@link Timed @Timed} annotations from bean methods.
*
* @author Phillip Webb
* @since 2.5.0
* @since 4.0.0
*/
public final class TimedAnnotations {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import org.springframework.boot.context.properties.ConfigurationProperties;

View File

@@ -14,11 +14,11 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.data.metrics.MetricsRepositoryMethodInvocationListener;
import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport;
import org.springframework.data.repository.core.support.RepositoryFactoryCustomizer;
import org.springframework.data.repository.core.support.RepositoryFactorySupport;

View File

@@ -14,12 +14,12 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import io.micrometer.core.instrument.Timer.Builder;
import org.springframework.boot.actuate.autoconfigure.metrics.data.DataMetricsProperties.Repository.Autotime;
import org.springframework.boot.actuate.metrics.data.AutoTimer;
import org.springframework.boot.data.metrics.AutoTimer;
import org.springframework.boot.data.metrics.autoconfigure.DataMetricsProperties.Repository.Autotime;
/**
* {@link AutoTimer} whose behavior is configured by {@link Autotime} properties.

View File

@@ -14,24 +14,21 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.beans.factory.ObjectProvider;
import org.springframework.boot.actuate.autoconfigure.metrics.data.DataMetricsProperties.Repository;
import org.springframework.boot.actuate.metrics.data.DefaultRepositoryTagsProvider;
import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.actuate.metrics.data.RepositoryTagsProvider;
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.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration;
import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration;
import org.springframework.boot.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration;
import org.springframework.boot.data.metrics.DefaultRepositoryTagsProvider;
import org.springframework.boot.data.metrics.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.data.metrics.RepositoryTagsProvider;
import org.springframework.boot.data.metrics.autoconfigure.DataMetricsProperties.Repository;
import org.springframework.context.annotation.Bean;
import org.springframework.util.function.SingletonSupplier;
@@ -39,10 +36,12 @@ import org.springframework.util.function.SingletonSupplier;
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data Repository metrics.
*
* @author Phillip Webb
* @since 2.5.0
* @since 4.0.0
*/
@AutoConfiguration(after = { MetricsAutoConfiguration.class, CompositeMeterRegistryAutoConfiguration.class,
SimpleMetricsExportAutoConfiguration.class })
@AutoConfiguration(
afterName = { "org.springframework.boot.metrics.autoconfigure.CompositeMeterRegistryAutoConfiguration",
"org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration",
"org.springframework.boot.metrics.autoconfigure.export.simple.SimpleMetricsExportAutoConfiguration" })
@ConditionalOnClass(org.springframework.data.repository.Repository.class)
@ConditionalOnBean(MeterRegistry.class)
@EnableConfigurationProperties(DataMetricsProperties.class)

View File

@@ -15,6 +15,6 @@
*/
/**
* Auto-configuration for Spring Data actuator metrics.
* Auto-configuration for Spring Data repository metrics.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;

View File

@@ -15,6 +15,6 @@
*/
/**
* Actuator support for Spring Data Repository metrics.
* Spring Data repository metrics.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;

View File

@@ -1 +1,2 @@
org.springframework.boot.data.metrics.autoconfigure.RepositoryMetricsAutoConfiguration
org.springframework.boot.data.web.autoconfigure.SpringDataWebAutoConfiguration

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.io.IOException;
import java.lang.reflect.Method;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.lang.reflect.Method;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.metrics.data;
package org.springframework.boot.data.metrics;
import java.lang.reflect.Method;
import java.util.Set;

View File

@@ -14,12 +14,12 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.data.metrics.MetricsRepositoryMethodInvocationListener;
import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport;
import org.springframework.data.repository.core.support.RepositoryFactoryCustomizer;
import org.springframework.data.repository.core.support.RepositoryFactorySupport;

View File

@@ -14,19 +14,19 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import io.micrometer.core.instrument.Gauge;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.MeterBinder;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import org.springframework.boot.actuate.autoconfigure.metrics.data.city.CityRepository;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
import org.springframework.boot.autoconfigure.AutoConfigurationPackage;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.autoconfigure.context.PropertyPlaceholderAutoConfiguration;
import org.springframework.boot.data.jpa.autoconfigure.JpaRepositoriesAutoConfiguration;
import org.springframework.boot.data.metrics.autoconfigure.city.CityRepository;
import org.springframework.boot.jdbc.autoconfigure.EmbeddedDataSourceConfiguration;
import org.springframework.boot.jpa.autoconfigure.hibernate.HibernateJpaAutoConfiguration;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -42,7 +42,8 @@ import static org.assertj.core.api.Assertions.assertThat;
*/
class RepositoryMetricsAutoConfigurationIntegrationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().with(MetricsRun.simple())
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withBean(SimpleMeterRegistry.class)
.withConfiguration(
AutoConfigurations.of(HibernateJpaAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class,
PropertyPlaceholderAutoConfiguration.class, RepositoryMetricsAutoConfiguration.class))

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data;
package org.springframework.boot.data.metrics.autoconfigure;
import java.util.Collection;
import java.util.Collections;
@@ -27,15 +27,16 @@ import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.Timer;
import io.micrometer.core.instrument.binder.MeterBinder;
import io.micrometer.core.instrument.distribution.HistogramSnapshot;
import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.ObjectFactory;
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
import org.springframework.boot.actuate.metrics.data.AutoTimer;
import org.springframework.boot.actuate.metrics.data.DefaultRepositoryTagsProvider;
import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.actuate.metrics.data.RepositoryTagsProvider;
import org.springframework.boot.autoconfigure.AutoConfigurations;
import org.springframework.boot.data.metrics.AutoTimer;
import org.springframework.boot.data.metrics.DefaultRepositoryTagsProvider;
import org.springframework.boot.data.metrics.MetricsRepositoryMethodInvocationListener;
import org.springframework.boot.data.metrics.RepositoryTagsProvider;
import org.springframework.boot.metrics.autoconfigure.MetricsAutoConfiguration;
import org.springframework.boot.test.context.assertj.AssertableApplicationContext;
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
import org.springframework.context.annotation.Bean;
@@ -57,8 +58,11 @@ import static org.mockito.Mockito.mock;
*/
class RepositoryMetricsAutoConfigurationTests {
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner().with(MetricsRun.simple())
.withConfiguration(AutoConfigurations.of(RepositoryMetricsAutoConfiguration.class));
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
.withBean(SimpleMeterRegistry.class)
.withConfiguration(
AutoConfigurations.of(MetricsAutoConfiguration.class, RepositoryMetricsAutoConfiguration.class))
.withPropertyValues("management.metrics.use-global-registry=false");
@Test
void backsOffWhenMeterRegistryIsMissing() {

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data.city;
package org.springframework.boot.data.metrics.autoconfigure.city;
import java.io.Serializable;

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package org.springframework.boot.actuate.autoconfigure.metrics.data.city;
package org.springframework.boot.data.metrics.autoconfigure.city;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;