2012-09-13 4 views
5

TTL 설정이 예 : timeToLiveSeconds는 ehcache 확장자로 grails 캐시 플러그인을 사용하여 설정할 수 있습니까?Grails 캐시 -ehcache 플러그인 및 TTL 값

기본 플러그인의 설명서에는 TTL이 지원되지 않지만 ehcache 확장에 이러한 값이 명시되어 있음이 명시되어 있습니다. 지금까지 캐시에 대한 TTL 값을 설정하지 못했습니다.

grails.cache.config = { 
    cache { 
     name 'messages' 
     maxElementsInMemory 1000 
     eternal false 
     timeToLiveSeconds 120 
     overflowToDisk false 
     memoryStoreEvictionPolicy 'LRU' 
    } 
} 

@Cacheable('messages') 
def getMessages() 

그러나 메시지는 무기한으로 캐시 된 상태로 유지됩니다. @CacheEvict 주석을 사용하여 캐시를 수동으로 플러시 할 수 있지만 ehcache 확장을 사용할 때 TTL이 지원되기를 바랬습니다.

감사합니다.

+0

하지만 HTTPS 참조 : /를

예를 들어

,이 60초 "mycache"라는 이름의 캐시에 살고 기본 시간을 오버라이드 (override)하는 스크립트입니다 /jira.grails.org/browse/GPCACHEEHCACHE-6 –

+0

@Ken 링크가 깨졌습니다. – GreenGiant

답변

6

예, cache-ehcache 플러그인은 TTL 및 EhCache에서 기본적으로 지원하는 모든 캐시 구성 속성을 확실히 지원합니다. 문서에 명시된 바와 같이 기본 캐시 플러그인은 TTL을 지원하지 않는 간단한 메모리 내 캐시를 구현하지만 캐시 DSL은 알 수없는 구성 설정을 통해 기본 캐시 제공자에게 전달합니다.

당신은 Config.groovy 또는 CacheConfig.groovy에 다음을 추가함으로써으로 Ehcache 설정을 구성 할 수 있습니다

grailsCacheManager.cacheNames.each { 
    def config = grailsCacheManager.getCache(it).nativeCache.cacheConfiguration 
    println "timeToLiveSeconds: ${config.timeToLiveSeconds}" 
    println "timeToIdleSeconds: ${config.timeToIdleSeconds}" 
} 

다른의 EhCache javadoc for CacheConfiguration를 참조하십시오 : 다음과 같이 런타임에 캐시 설정을 확인할 수 있습니다

grails.cache.config = { 
    cache { 
     name 'mycache' 
    } 

    //this is not a cache, it's a set of default configs to apply to other caches 
    defaults { 
     eternal false 
     overflowToDisk true 
     maxElementsInMemory 10000 
     maxElementsOnDisk 10000000 
     timeToLiveSeconds 300 
     timeToIdleSeconds 0 
    } 
} 

캐시 특성. grails.plugin.cachenet.sf.ehcache을 로깅하여 캐싱에 대한 자세한 디버그 로깅을 활성화 할 수도 있습니다.

Grails 캐싱 플러그인은 네이티브 EhCache 캐시 관리자와는 다른 독자적인 캐시 관리자를 구현합니다. ehCache를 직접 (ehcache.xml이나 다른 방법을 사용하여) 설정했다면,이 캐시들은 Grails 플러그인이 관리하는 캐시와는 별도로 실행됩니다.

참고 : 이전 버전의 Cache-EhCache 플러그인에는 TTL 설정이 올바르게 설정되지 않았으며 객체가 1 년 만료되었다는 버그가있었습니다. 이 문제는 Grails-Cache-Ehcache 1.1에서 수정되었습니다.

0

TTL 속성은 ehcache 코어 플러그인에서 지원됩니다. 어떻게 플러그인을 설치하고 있습니까? 내 프로젝트의 경우, 나는 단지 :

compile ":cache-ehcache:1.0.0" 

에서 플러그인을 닫습니다. 이 플러그인은 코어 grails 캐시 플러그인에 의존적이기 때문에 이것을 선언 할 필요가 없습니다.

0

시작시 grails-app/conf/BootStrap.groovy 스크립트로 구성을 무시하고이 문제를 해결할 수 있습니다. 이 질문은 오래 전에 질문을 받았다

class BootStrap { 

    def grailsCacheManager 

    def init = { servletContext -> 
     grailsCacheManager.getCache("mycache").nativeCache 
         .cacheConfiguration.timeToLiveSeconds = 60 
    } 
    def destroy = { 
    } 
}