1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | @Slf4j @Service public class MyCacheService { /** * self-autowiring */ @Resource private MyCacheService self; @Autowired private CommonDAO commonDAO; @Cacheable(value = "my:cache1", unless = "#result == null") public String getMyCache() { return commonDAO.queryForObject("Cache.SELECT_MY_CACHE", null, String.class); } public void getCache() { this.getMyCache(); // 캐싱 안됨 self.getCache(); // 정상 캐싱 } } | cs |
문제점
Spring Cache 사용 시 동일 클래스에서 @Cacheable 선언된 메서드를
자기 호출(Self-invocation)할 경우 캐싱이 안되는 현상이 발생함.
자기 호출(Self-invocation)할 경우 캐싱이 안되는 현상이 발생함.
this.getMyCache(); // 캐싱 안됨
해결방안
- 내부 호출이 일어나지 않도록 설계
- Spring 4.3부터 지원하는 @Resource self-autowiring 으로 해결
/**
* self-autowiring
*/
@Resource
private MyCacheService self;
self.getCache(); // 정상 캐싱
0 댓글