2017-12-19 16 views
1

다음은 spring에 cachename "simpleCache"가 포함 된 간단한 ConcurrentHashMap을 자동으로 생성합니다.캐시 자동 구성을 유지하면서 사용자 정의 @ 캐시 가능 캐시를 추가하는 방법은 무엇입니까?

@Cachable("simpleCache") 
public String simpleCache(String val) { 
    //... 
} 

@Cache("selfexpire") 
public String selfexpireLookup(String val) { 

} 

질문 : 정의 된 자기 만료 시간이 하나의 캐시를 추가하고 싶지만 내가 사용하는 다른 모든 @Cacheable에 대한 자동 구성 온천 HashMaps을에 의존 할 경우 어떻게?

다음은 캐시 작성

@Bean 
public CaffeineCache selfexpireCache() { 
    return new CaffeineCache("selfexpire", 
      Caffeine.newBuilder() 
        .maximumSize(100) 
        .expireAfterAccess(1, TimeUnit.HOURS) 
        .build()); 
} 

을하지만 : 만 caffeing 캐시 명시 적으로 구성된 작품 ...

java.lang.IllegalArgumentException: Cannot find cache named 'simpleCache' for Builder : whan 내가 지금 내 응용 프로그램을 시작, 다른 모든 번 자동 구성 캐시는 실패.

그래서 어떻게 자동으로 캐시를 유지하면서 사용자 정의 캐시를 명시 적으로 추가 할 수 있습니까?

은 물론 내가 직접 그 간단한 캐시를 추가 할 수 있습니다,하지만 난 그들을 자동 구성 봄 원합니다 :

@Bean 
public ConcurrentMapCache simpleCache() { 
    return new ConcurrentMapCache("simpleCache"); 
} 

답변

1

난 당신이 사용하는 것입니다 명시 적 org.springframework.cache.CacheManager를 지정하여 캐시의 다른 유형을 사용할 수있을 것 같아요 :

@Cachable(value = "simpleCache", cacheManager="simpleCacheManager") 
public String getValueFromSimpleCache(String val) { 
    //... 
} 

어떤 봄의 기본 CacheManager의 콩 이름이 확실하지 않습니다. 어쩌면 당신은 명시 적으로 그것을 선언해야합니다 :

@Bean 
public CacheMananger simpleCacheManager() { 
    return new ConcurrentMapCacheManager(); 
} 
+0

내가 잘못 했어 : selfexpireCache는 예상대로 작동하고 카페인으로 구성됩니다. 일반적으로 자동으로 설정된'ConcurrentHashMap' 캐시'somecache'는 더 이상 초기화되지 않습니다. 나는 명확한 카페인 캐시를 정의하지 않은 캐시를 초기화하기 위해 봄을 말하고 싶다. – membersound

+1

귀하의 의견과 편집 내용을 바탕으로 답변을 새로 작성했습니다 – dpr

+0

@ mememound 아직 다른 답변을 찾고 계십니까? 이 대답의 어떤면이 효과가 없거나 너무 복잡합니까? – dpr