From 91da34a8c644357c72aafbf788bad7fc12459e17 Mon Sep 17 00:00:00 2001 From: Adam Saghy Date: Tue, 20 May 2025 15:33:15 +0200 Subject: [PATCH] FINERACT-2262: Fix cache resolution --- .../core/config/cache/CacheConfig.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/CacheConfig.java b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/CacheConfig.java index f64c947a9..b9196a3d9 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/CacheConfig.java +++ b/fineract-provider/src/main/java/org/apache/fineract/infrastructure/core/config/cache/CacheConfig.java @@ -80,13 +80,24 @@ public class CacheConfig { javax.cache.configuration.Configuration defaultTemplate = generateCacheConfiguration(defaultMaxEntries, defaultTimeToLive); // Scan all packages (entire classpath) - Reflections reflections = new Reflections( - new ConfigurationBuilder().setUrls(ClasspathHelper.forJavaClassPath()).addScanners(Scanners.MethodsAnnotated)); + Reflections reflections = new Reflections(new ConfigurationBuilder().setUrls(ClasspathHelper.forJavaClassPath()) + .addScanners(Scanners.MethodsAnnotated, Scanners.TypesAnnotated)); // Find all methods annotated with @Cacheable Set annotatedMethods = reflections.getMethodsAnnotatedWith(Cacheable.class); Set cacheNames = annotatedMethods.stream().map(method -> method.getAnnotation(Cacheable.class)) .flatMap(annotation -> Stream.concat(Arrays.stream(annotation.value()), Arrays.stream(annotation.cacheNames()))) .collect(Collectors.toSet()); + // Find all types annotated with @Cacheable + Set> annotatedClasses = reflections.getTypesAnnotatedWith(Cacheable.class); + cacheNames.addAll(annotatedClasses.stream().map(clazz -> clazz.getAnnotation(Cacheable.class)) + .flatMap(annotation -> Stream.concat(Arrays.stream(annotation.value()), Arrays.stream(annotation.cacheNames()))) + .collect(Collectors.toSet())); + // Find all types annotated with @CacheConfig + Set> annotatedCacheConfigClasses = reflections + .getTypesAnnotatedWith(org.springframework.cache.annotation.CacheConfig.class); + cacheNames.addAll(annotatedCacheConfigClasses.stream() + .map(clazz -> clazz.getAnnotation(org.springframework.cache.annotation.CacheConfig.class)) + .flatMap(annotation -> Arrays.stream(annotation.cacheNames())).collect(Collectors.toSet())); // Register the caches into the cache manager cacheNames.forEach(cacheName -> { if (cacheManager.getCache(cacheName) == null) {