2012-09-13 17 views
5

Czy każdy może potwierdzić ustawienia TTL, np. timeToLiveSeconds można ustawić za pomocą wtyczki Grails z rozszerzeniem ehcache?Wtyczki cache-ehcache wtyczki i wartości TTL

Dokumentacja wtyczki podstawowej jawnie stwierdza, że ​​TTL nie jest obsługiwany, ale rozszerzenie ehcache wspomina o tych wartościach. Do tej pory miałem żadnych sukcesów ustawienie wartości TTL dla mojej skrzynki:

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

@Cacheable('messages') 
def getMessages() 

Jednak komunikaty pozostają w pamięci podręcznej na czas nieokreślony. Mogę ręcznie przepłukać pamięć podręczną przy użyciu adnotacji @CacheEvict, ale miałem nadzieję, że TTL będzie obsługiwane przy korzystaniu z rozszerzenia ehcache.

Dzięki

+0

to pytanie zostało zadane już dawno temu, ale zobaczyć https://jira.grails.org/browse/GPCACHEEHCACHE-6 –

+0

@Ken link jest teraz uszkodzony – GreenGiant

Odpowiedz

6

Tak, wtyczka cache-ehcache zdecydowanie obsługuje TTL i wszystkie właściwości konfiguracji pamięci podręcznej, które są natywnie obsługiwane przez EhCache. Jak stwierdzono w dokumencie, wtyczka bazowej pamięci podręcznej implementuje prostą pamięć podręczną w pamięci, która nie obsługuje TTL, ale DSL z pamięcią podręczną przechodzi przez wszelkie nieznane ustawienia konfiguracyjne do podstawowego dostawcy pamięci podręcznej.

Można skonfigurować ustawienia ehcache przez dodanie następujących do Config.groovy lub CacheConfig.groovy:

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 
    } 
} 

Można sprawdzić ustawienia cache przy starcie, co następuje:

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

Zobacz EhCache javadoc for CacheConfiguration dla innych właściwości pamięci podręcznej. Można również włączyć szczegółowe rejestrowanie debugowania pamięci podręcznej, rejestrując grails.plugin.cache i net.sf.ehcache.

Należy pamiętać, że wtyczki cache Grails implementują własny menedżer pamięci podręcznej, który jest inny i niezależny od macierzystego menedżera pamięci podręcznej EhCache. Jeśli skonfigurowałeś EhCache bezpośrednio (używając ehcache.xml lub w inny sposób), to te pamięci podręczne będą działać niezależnie od pamięci podręcznych zarządzanych przez wtyczkę Grails.

Uwaga: Rzeczywiście istniał błąd w starszych wersjach wtyczki Cache-EhCache, w których ustawienie TTL nie było ustawione poprawnie, a obiekty wygasły w ciągu roku; zostało to naprawione w Grails-Cache-Ehcache 1.1.

0

Obiekt TTL jest obsługiwany z wtyczką rdzenia ehcache. Jak instalujesz wtyczkę? Dla mojego projektu mam tylko:

compile ":cache-ehcache:1.0.0" 

w BuildConfig.groovy w zamknięciu wtyczek. Ponieważ ta wtyczka ma zależność od wtyczki cache rdzenia rdzenia, nie musisz jej deklarować.

0

Mogłabym rozwiązać ten problem, przesłonięcie konfiguracji przy uruchomieniu ze skryptem grails-app/conf/BootStrap.groovy.

Na przykład, jest to skrypt, aby zastąpić domyślny czas żyć do 60 sekund z pamięci podręcznej o nazwie „mycache”:

class BootStrap { 

    def grailsCacheManager 

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