2017-11-22 25 views
0

@Cacheable (org.springframework.cache.annotation.Cacheable)으로 주석 된 메소드를 호출 할 때 다른 (제 3 자) 프로젝트에서 다음 오류가 발생합니다. 주석을 추가하고 문제가 해결되지 내 프로젝트에서 캐싱을 가능하게@Cacheable (org.springframework.cache.annotation.Cacheable) 주석이 붙은 메소드 호출

@Cacheable("usersCache") 
@Transactional(readOnly = true) 
@Override 

다음과 같이

java.lang.IllegalArgumentException: Cannot find cache named 'usersCache' for CacheableOperation[public com.epsilon.amp.infra.model.AuthUser com.epsilon.amp.infra.dao.ContextDao.loadContextUser(java.lang.String,java.lang.String)] caches=[usersCache] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless='' 

타사 프로젝트의 방법을 통해 주석이다. 가능성이 잘못되었을 수 있습니까?

답변

1

나는 그런 구성을 만들기 위해 당신에게 제안 :

@Configuration 
public class CacheService extends CachingConfigurerSupport { 
    @Bean 
    public CacheManager cacheManager() { 
     ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() { 
      @Override 
      protected Cache createConcurrentMapCache(final String name) { 
       return new ConcurrentMapCache(name, 
         CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(100).build().asMap(), false); 
      } 
     }; 
     return cacheManager; 
    } 
    @Bean 
    @Primary 
    public CacheManager guavaCacheManager() { 
     return new GuavaCacheManager(); 
    } 
} 

그 후, 당신은 당신이 방법을 캐시 할 클래스의 머리에이 주석을 추가해야합니다. @EnableCaching

구아바 정보 : https://github.com/google/guava

@Cacheable(cacheNames = "guavaCacheManager") 

그리고이 주석 응용 프로그램 클래스의 머리에