Skip to content

Commit 341e129

Browse files
committed
Use SingletonSupplier in MetricsRepositoryFactoryCustomizer
Closes gh-27634
1 parent 35ea3b2 commit 341e129

File tree

3 files changed

+9
-13
lines changed

3 files changed

+9
-13
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/data/MetricsRepositoryMethodInvocationListenerBeanPostProcessor.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,13 @@
1616

1717
package org.springframework.boot.actuate.autoconfigure.metrics.data;
1818

19-
import java.util.function.Supplier;
20-
2119
import org.springframework.beans.BeansException;
2220
import org.springframework.beans.factory.config.BeanPostProcessor;
2321
import org.springframework.boot.actuate.metrics.data.MetricsRepositoryMethodInvocationListener;
2422
import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport;
2523
import org.springframework.data.repository.core.support.RepositoryFactoryCustomizer;
2624
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
25+
import org.springframework.util.function.SingletonSupplier;
2726

2827
/**
2928
* {@link BeanPostProcessor} to apply a {@link MetricsRepositoryMethodInvocationListener}
@@ -36,7 +35,7 @@ class MetricsRepositoryMethodInvocationListenerBeanPostProcessor implements Bean
3635
private final RepositoryFactoryCustomizer customizer;
3736

3837
MetricsRepositoryMethodInvocationListenerBeanPostProcessor(
39-
Supplier<MetricsRepositoryMethodInvocationListener> listener) {
38+
SingletonSupplier<MetricsRepositoryMethodInvocationListener> listener) {
4039
this.customizer = new MetricsRepositoryFactoryCustomizer(listener);
4140
}
4241

@@ -50,21 +49,16 @@ public Object postProcessBeforeInitialization(Object bean, String beanName) thro
5049

5150
private static final class MetricsRepositoryFactoryCustomizer implements RepositoryFactoryCustomizer {
5251

53-
private final Supplier<MetricsRepositoryMethodInvocationListener> listenerSupplier;
54-
55-
private volatile MetricsRepositoryMethodInvocationListener listener;
52+
private final SingletonSupplier<MetricsRepositoryMethodInvocationListener> listenerSupplier;
5653

5754
private MetricsRepositoryFactoryCustomizer(
58-
Supplier<MetricsRepositoryMethodInvocationListener> listenerSupplier) {
55+
SingletonSupplier<MetricsRepositoryMethodInvocationListener> listenerSupplier) {
5956
this.listenerSupplier = listenerSupplier;
6057
}
6158

6259
@Override
6360
public void customize(RepositoryFactorySupport repositoryFactory) {
64-
if (this.listener == null) {
65-
this.listener = this.listenerSupplier.get();
66-
}
67-
repositoryFactory.addInvocationListener(this.listener);
61+
repositoryFactory.addInvocationListener(this.listenerSupplier.get());
6862
}
6963

7064
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/data/RepositoryMetricsAutoConfiguration.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import org.springframework.boot.context.properties.EnableConfigurationProperties;
3636
import org.springframework.context.annotation.Bean;
3737
import org.springframework.context.annotation.Configuration;
38+
import org.springframework.util.function.SingletonSupplier;
3839

3940
/**
4041
* {@link EnableAutoConfiguration Auto-configuration} for Spring Data Repository metrics.
@@ -75,7 +76,7 @@ public MetricsRepositoryMethodInvocationListener metricsRepositoryMethodInvocati
7576
public static MetricsRepositoryMethodInvocationListenerBeanPostProcessor metricsRepositoryMethodInvocationListenerBeanPostProcessor(
7677
ObjectProvider<MetricsRepositoryMethodInvocationListener> metricsRepositoryMethodInvocationListener) {
7778
return new MetricsRepositoryMethodInvocationListenerBeanPostProcessor(
78-
metricsRepositoryMethodInvocationListener::getObject);
79+
SingletonSupplier.of(metricsRepositoryMethodInvocationListener::getObject));
7980
}
8081

8182
}

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/data/MetricsRepositoryMethodInvocationListenerBeanPostProcessorTests.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport;
2424
import org.springframework.data.repository.core.support.RepositoryFactoryCustomizer;
2525
import org.springframework.data.repository.core.support.RepositoryFactorySupport;
26+
import org.springframework.util.function.SingletonSupplier;
2627

2728
import static org.assertj.core.api.Assertions.assertThat;
2829
import static org.mockito.Mockito.mock;
@@ -38,7 +39,7 @@ class MetricsRepositoryMethodInvocationListenerBeanPostProcessorTests {
3839
private MetricsRepositoryMethodInvocationListener listener = mock(MetricsRepositoryMethodInvocationListener.class);
3940

4041
private MetricsRepositoryMethodInvocationListenerBeanPostProcessor postProcessor = new MetricsRepositoryMethodInvocationListenerBeanPostProcessor(
41-
() -> this.listener);
42+
SingletonSupplier.of(this.listener));
4243

4344
@Test
4445
@SuppressWarnings("rawtypes")

0 commit comments

Comments
 (0)