Commit 0c41384e authored by Stephane Nicoll's avatar Stephane Nicoll

Merge branch '2.0.x'

parents e524adb2 a25b6bd4
...@@ -26,6 +26,8 @@ import io.micrometer.core.instrument.binder.MeterBinder; ...@@ -26,6 +26,8 @@ import io.micrometer.core.instrument.binder.MeterBinder;
import org.springframework.boot.util.LambdaSafe; import org.springframework.boot.util.LambdaSafe;
import org.springframework.cache.Cache; import org.springframework.cache.Cache;
import org.springframework.cache.transaction.TransactionAwareCacheDecorator;
import org.springframework.util.ClassUtils;
/** /**
* Register supported {@link Cache} to a {@link MeterRegistry}. * Register supported {@link Cache} to a {@link MeterRegistry}.
...@@ -59,7 +61,7 @@ public class CacheMetricsRegistrar { ...@@ -59,7 +61,7 @@ public class CacheMetricsRegistrar {
* @return {@code true} if the {@code cache} is supported and was registered * @return {@code true} if the {@code cache} is supported and was registered
*/ */
public boolean bindCacheToRegistry(Cache cache, Tag... tags) { public boolean bindCacheToRegistry(Cache cache, Tag... tags) {
MeterBinder meterBinder = getMeterBinder(cache, Tags.of(tags)); MeterBinder meterBinder = getMeterBinder(unwrapIfNecessary(cache), Tags.of(tags));
if (meterBinder != null) { if (meterBinder != null) {
meterBinder.bindTo(this.registry); meterBinder.bindTo(this.registry);
return true; return true;
...@@ -87,4 +89,29 @@ public class CacheMetricsRegistrar { ...@@ -87,4 +89,29 @@ public class CacheMetricsRegistrar {
return Tags.of("name", cache.getName()); return Tags.of("name", cache.getName());
} }
private Cache unwrapIfNecessary(Cache cache) {
if (ClassUtils.isPresent(
"org.springframework.cache.transaction.TransactionAwareCacheDecorator",
getClass().getClassLoader())) {
return TransactionAwareCacheDecoratorHandler.unwrapIfNecessary(cache);
}
return cache;
}
private static class TransactionAwareCacheDecoratorHandler {
private static Cache unwrapIfNecessary(Cache cache) {
try {
if (cache instanceof TransactionAwareCacheDecorator) {
return ((TransactionAwareCacheDecorator) cache).getTargetCache();
}
}
catch (NoClassDefFoundError ex) {
// Ignore
}
return cache;
}
}
} }
...@@ -24,6 +24,7 @@ import io.micrometer.core.instrument.simple.SimpleMeterRegistry; ...@@ -24,6 +24,7 @@ import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import org.junit.Test; import org.junit.Test;
import org.springframework.cache.caffeine.CaffeineCache; import org.springframework.cache.caffeine.CaffeineCache;
import org.springframework.cache.transaction.TransactionAwareCacheDecorator;
import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThat;
...@@ -46,6 +47,16 @@ public class CacheMetricsRegistrarTests { ...@@ -46,6 +47,16 @@ public class CacheMetricsRegistrarTests {
.isNotNull(); .isNotNull();
} }
@Test
public void bindToSupportedCacheWrappedInTransactionProxy() {
CacheMetricsRegistrar registrar = new CacheMetricsRegistrar(this.meterRegistry,
Collections.singleton(new CaffeineCacheMeterBinderProvider()));
assertThat(registrar.bindCacheToRegistry(new TransactionAwareCacheDecorator(
new CaffeineCache("test", Caffeine.newBuilder().build())))).isTrue();
assertThat(this.meterRegistry.get("cache.gets").tags("name", "test").meter())
.isNotNull();
}
@Test @Test
public void bindToUnsupportedCache() { public void bindToUnsupportedCache() {
CacheMetricsRegistrar registrar = new CacheMetricsRegistrar(this.meterRegistry, CacheMetricsRegistrar registrar = new CacheMetricsRegistrar(this.meterRegistry,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment