@ -26,7 +26,9 @@ import org.springframework.boot.actuate.cache.CacheStatisticsProvider;
@@ -26,7 +26,9 @@ import org.springframework.boot.actuate.cache.CacheStatisticsProvider;
import org.springframework.boot.actuate.metrics.Metric ;
import org.springframework.cache.Cache ;
import org.springframework.cache.CacheManager ;
import org.springframework.cache.transaction.TransactionAwareCacheDecorator ;
import org.springframework.core.ResolvableType ;
import org.springframework.util.ClassUtils ;
import org.springframework.util.LinkedMultiValueMap ;
import org.springframework.util.MultiValueMap ;
@ -78,7 +80,7 @@ public class CachePublicMetrics implements PublicMetrics {
@@ -78,7 +80,7 @@ public class CachePublicMetrics implements PublicMetrics {
List < CacheManagerBean > cacheManagerBeans ) {
for ( CacheManagerBean cacheManagerBean : cacheManagerBeans ) {
CacheManager cacheManager = cacheManagerBean . getCacheManager ( ) ;
Cache cache = cacheManager . getCache ( cacheName ) ;
Cache cache = unwrapIfNecessary ( cacheManager . getCache ( cacheName ) ) ;
CacheStatistics statistics = getCacheStatistics ( cache , cacheManager ) ;
if ( statistics ! = null ) {
String prefix = cacheName ;
@ -91,6 +93,14 @@ public class CachePublicMetrics implements PublicMetrics {
@@ -91,6 +93,14 @@ public class CachePublicMetrics implements PublicMetrics {
}
}
private Cache unwrapIfNecessary ( Cache cache ) {
if ( ClassUtils . isPresent ( "org.springframework.cache.transaction.TransactionAwareCacheDecorator" ,
getClass ( ) . getClassLoader ( ) ) ) {
return TransactionAwareCacheDecoratorHandler . unwrapIfNecessary ( cache ) ;
}
return cache ;
}
@SuppressWarnings ( { "rawtypes" , "unchecked" } )
private CacheStatistics getCacheStatistics ( Cache cache , CacheManager cacheManager ) {
if ( this . statisticsProviders ! = null ) {
@ -131,4 +141,19 @@ public class CachePublicMetrics implements PublicMetrics {
@@ -131,4 +141,19 @@ public class CachePublicMetrics implements PublicMetrics {
}
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 ;
}
}
}