본문 바로가기

트러블슈팅

스프링부트에서 Cannot find cache named 캐시명 for Builder 에러

문제

서버에서 아래와 같이 'Cannot find cache named '로 시작하는 캐시 에러가 발생했다.

java.lang.IllegalArgumentException: Cannot find cache named 'cutoffDate' for Builder[public void com.OperationUtil.removeCutoffDateCache(java.lang.String,java.lang.String)] caches=[cutoffDate] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='',false,false
	at org.springframework.cache.interceptor.AbstractCacheResolver.resolveCaches(AbstractCacheResolver.java:92)
	at org.springframework.cache.interceptor.CacheAspectSupport.getCaches(CacheAspectSupport.java:252)

 

에러 난 곳을 확인해보니 @CacheEvict("cutoffDate")나 @Cacheable("cutoffDate") 어노테이션이 붙은 곳이었다.

@CacheEvict와 @Cacheable는 org.springframework.cache.annotation 패키지에 있는 것을 사용하였다.

 

Caffeine Cache를 사용하지 않고 스프링 자체 Cache 기능을 사용하고 있었다.

원인

처음에는 Caffeine Cache와 CacheManager를 추가해줘야 하는 줄 알았다.

하지만 스프링 부트에서는 자동으로 CacheManager 빈을 설정하므로, 구현할 필요가 없다고 한다.

https://stackoverflow.com/questions/75942189/cachemanger-defined-as-bean-and-in-application-yaml

https://jiwondev.tistory.com/282

 

확인해보니 이번에 여러 라이브러리가 추가되고 버전이 업그레이드 되면서 여러 캐시 라이브러리가 들어온 거 같다.

그래서 프로그램 실행 시 어떤 캐시 매니저를 사용해야할 지 명확하지 않으므로, @Cacheagle 같은 기능이 실행되지 않은 것으로 추측된다. 

따라서, application.yml에 캐시 설정을 명시해주었다.

 

해결

아래와 같이 application.yml에 cache 설정을 추가해주니 문제가 해결되었다.

spring:
    cache:
        type: simple
        cache-names:
            - cutoffDate

 

Spring Boot가 자동으로 캐시 매니저를 설정할 때, 명확하게 사용할 캐시 타입을 지정하려면 spring.cache.type 으로 설정해야 한다.

 

spring.cache.cache-names는 메서드의 결과를 저장하거나 삭제할 캐시를 식별하기 위해 사용된다.

주로 @Cacheable, @CacheEvict, @CachePut와 같은 캐시 관련 어노테이션에서 사용된다.

 

 

참고 자료

https://stackoverflow.com/questions/75942189/cachemanger-defined-as-bean-and-in-application-yaml

 

CacheManger defined as bean and in application.yaml

In Spring Boot, I would like to use one cache manager defined as bean plus Redis cache defined in application.yaml. But after define cache manager like bean the other one in application.yaml is ign...

stackoverflow.com

 

https://jiwondev.tistory.com/282

 

Cache#1 스프링의 캐시 추상화(@Cacheable)

스프링 프레임워크는 다른 서비스와의 통합 & 기능 추상화를 제공해준다. (RedisTemplate, RestTemplate, MailSender....)2012년 스프링 3.1버전부터 캐시 추상화(Cache Abstraction)을 제공해주며, 이는 2014년 스프

jiwondev.tistory.com

 

https://hogwart-scholars.tistory.com/entry/CacheSpring-EhCache-vs-Cache2k-vs-Caffeine-%EC%BA%90%EC%8B%9C-%EB%B9%84%EA%B5%90%ED%95%98%EA%B8%B0

 

[Cache/Spring] EhCache vs Cache2k vs Caffeine 캐시 비교하기

사이드 프로젝트에 캐시를 적용하며 이것저것 알아보는 시리즈 1. [Spring] 캐시란? + Spring Boot 내장 캐시 알아보기2. [Cache/Spring] EhCache vs Cache2k vs Caffeine 캐시 비교하기3. [Cache/Spring] 내 어플리케이

hogwart-scholars.tistory.com