Skip to content

Commit 049c6d5

Browse files
committed
Merge branch '3.4.x' into 3.5.x
Closes gh-48056
2 parents 5c711e2 + d08ac5c commit 049c6d5

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMeterBinderProvidersConfiguration.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
import org.springframework.boot.actuate.metrics.cache.JCacheCacheMeterBinderProvider;
3131
import org.springframework.boot.actuate.metrics.cache.RedisCacheMeterBinderProvider;
3232
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
33+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
3334
import org.springframework.cache.caffeine.CaffeineCache;
3435
import org.springframework.cache.jcache.JCacheCache;
3536
import org.springframework.context.annotation.Bean;
@@ -80,6 +81,7 @@ HazelcastCacheMeterBinderProvider hazelcastCacheMeterBinderProvider() {
8081

8182
@Configuration(proxyBeanMethods = false)
8283
@ConditionalOnClass({ JCacheCache.class, javax.cache.CacheManager.class })
84+
@ConditionalOnMissingBean(JCacheCacheMeterBinderProvider.class)
8385
static class JCacheCacheMeterBinderProviderConfiguration {
8486

8587
@Bean

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/metrics/cache/CacheMetricsAutoConfigurationTests.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import org.junit.jupiter.api.Test;
2525

2626
import org.springframework.boot.actuate.autoconfigure.metrics.test.MetricsRun;
27+
import org.springframework.boot.actuate.metrics.cache.JCacheCacheMeterBinderProvider;
2728
import org.springframework.boot.autoconfigure.AutoConfigurations;
2829
import org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration;
2930
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
@@ -113,6 +114,23 @@ void customCacheManagersAreInstrumented() {
113114
});
114115
}
115116

117+
@Test
118+
void jcacheCacheMeterBinderProviderIsAutoConfigured() {
119+
this.contextRunner.withPropertyValues("spring.cache.type=simple", "spring.cache.cache-names=cache1,cache2")
120+
.run((context) -> assertThat(context).hasSingleBean(JCacheCacheMeterBinderProvider.class)
121+
.hasBean("jCacheCacheMeterBinderProvider"));
122+
}
123+
124+
@Test
125+
void jcacheCacheMeterBinderProviderBacksOff() {
126+
this.contextRunner.withPropertyValues("spring.cache.type=simple", "spring.cache.cache-names=cache1,cache2")
127+
.withBean("customProvider", JCacheCacheMeterBinderProvider.class,
128+
() -> new JCacheCacheMeterBinderProvider(true))
129+
.run((context) -> assertThat(context).hasSingleBean(JCacheCacheMeterBinderProvider.class)
130+
.hasBean("customProvider")
131+
.doesNotHaveBean("jCacheCacheMeterBinderProvider"));
132+
}
133+
116134
@Configuration(proxyBeanMethods = false)
117135
static class CustomCacheManagersConfiguration implements CachingConfigurer {
118136

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/metrics/cache/JCacheCacheMeterBinderProvider.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
package org.springframework.boot.actuate.metrics.cache;
1818

19+
import io.micrometer.core.instrument.FunctionCounter;
20+
import io.micrometer.core.instrument.Gauge;
1921
import io.micrometer.core.instrument.Tag;
2022
import io.micrometer.core.instrument.binder.MeterBinder;
2123
import io.micrometer.core.instrument.binder.cache.JCacheMetrics;
@@ -30,9 +32,33 @@
3032
*/
3133
public class JCacheCacheMeterBinderProvider implements CacheMeterBinderProvider<JCacheCache> {
3234

35+
private final boolean registerCacheRemovalsAsFunctionCounter;
36+
37+
/**
38+
* Creates a {@code JCacheCacheMeterBinderProvider} that registers cache removals as a
39+
* {@link Gauge}.
40+
*/
41+
public JCacheCacheMeterBinderProvider() {
42+
this(false);
43+
}
44+
45+
/**
46+
* Creates a {@code JCacheCacheMeterBinderProvider} that registers cache removals with
47+
* a meter type that depends on the value of
48+
* {@code registerCacheRemovalsAsFunctionCounter}. When {@code false}, cache removals
49+
* are registered as a {@link Gauge}. When {@code true}, cache removals are registered
50+
* as a {@link FunctionCounter}.
51+
* @param registerCacheRemovalsAsFunctionCounter whether to register removals as a
52+
* gauge or a function counter
53+
* @since 3.4.12
54+
*/
55+
public JCacheCacheMeterBinderProvider(boolean registerCacheRemovalsAsFunctionCounter) {
56+
this.registerCacheRemovalsAsFunctionCounter = registerCacheRemovalsAsFunctionCounter;
57+
}
58+
3359
@Override
3460
public MeterBinder getMeterBinder(JCacheCache cache, Iterable<Tag> tags) {
35-
return new JCacheMetrics<>(cache.getNativeCache(), tags);
61+
return new JCacheMetrics<>(cache.getNativeCache(), tags, this.registerCacheRemovalsAsFunctionCounter);
3662
}
3763

3864
}

spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/metrics/cache/JCacheCacheMeterBinderProviderTests.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,20 @@ void jCacheCacheProvider() throws URISyntaxException {
5353
JCacheCache cache = new JCacheCache(this.nativeCache);
5454
MeterBinder meterBinder = new JCacheCacheMeterBinderProvider().getMeterBinder(cache, Collections.emptyList());
5555
assertThat(meterBinder).isInstanceOf(JCacheMetrics.class);
56+
assertThat(meterBinder).extracting("registerCacheRemovalsAsFunctionCounter").isEqualTo(false);
57+
}
58+
59+
@Test
60+
void jCacheCacheProviderRegisteringRemovalsAsAFunctionCounter() throws URISyntaxException {
61+
javax.cache.CacheManager cacheManager = mock(javax.cache.CacheManager.class);
62+
given(cacheManager.getURI()).willReturn(new URI("/test"));
63+
given(this.nativeCache.getCacheManager()).willReturn(cacheManager);
64+
given(this.nativeCache.getName()).willReturn("test");
65+
JCacheCache cache = new JCacheCache(this.nativeCache);
66+
MeterBinder meterBinder = new JCacheCacheMeterBinderProvider(true).getMeterBinder(cache,
67+
Collections.emptyList());
68+
assertThat(meterBinder).isInstanceOf(JCacheMetrics.class);
69+
assertThat(meterBinder).extracting("registerCacheRemovalsAsFunctionCounter").isEqualTo(true);
5670
}
5771

5872
}

0 commit comments

Comments
 (0)