#spring-boot #caffeine-cache
Вопрос:
Я настроил сценарий с использованием кэша кофеина, и я не могу заставить его работать, реальный метод всегда вызывается, когда параметры одинаковы. Вот моя конфигурация:
pom.xml
... lt;dependencygt; lt;groupIdgt;org.springframework.bootlt;/groupIdgt; lt;artifactIdgt;spring-boot-starter-cachelt;/artifactIdgt; lt;/dependencygt; lt;dependencygt; lt;groupIdgt;com.github.ben-manes.caffeinelt;/groupIdgt; lt;artifactIdgt;caffeinelt;/artifactIdgt; lt;/dependencygt; ...
Класс конфигурации для CacheManager
@Configuration @EnableCaching public class CachingConfig { public static final String CACHE_NAME = "test"; @Bean public CacheManager cacheManager() { CaffeineCacheManager cacheManager = new CaffeineCacheManager(CACHE_NAME); cacheManager.setCaffeine(caffeineConfig()); return cacheManager; } private Caffeine caffeineConfig() { return Caffeine.newBuilder() .expireAfterAccess(10, TimeUnit.MINUTES) .maximumSize(1024 * 1024 * 256); } }
А затем класс с кэшируемым методом:
@CacheConfig(cacheNames = {CachingConfig.CACHE_NAME}) public class MyClass{ @Cacheable public Object cacheableMethod(String a, String b, Boolean c) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return new Object() }
Я также попытался добавить имя кэша в кэшируемую аннотацию:
@Cacheable(value = CachingConfig.CACHE_NAME)
И переход @EnableCaching
к основному классу приложений Spring Boot.
Настоящий метод всегда вызывается.
Есть какие-нибудь идеи о том, что я делаю не так?
Спасибо
Ответ №1:
Метод @Cacheable должен быть расположен внутри @компонента, @Компонента, @Службы…