2012-09-13 15 views
5

TTL設定などが誰でも確認できます。 timeToLiveSecondsは、ehcache拡張機能を備えたgrailsキャッシュプラグインを使用して設定できますか?Grails cache-ehcacheプラグインとTTL値

基本プラグインのドキュメントでは、TTLがサポートされていないと明示的に述べていますが、ehcache拡張機能にはこれらの値が記述されています。

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

@Cacheable('messages') 
def getMessages() 

メッセージが無期限にキャッシュされたまましかし:これまでのところ、私はキャッシュのTTL値を設定全く成功していませんしました。 @CacheEvictアノテーションを使用して手動でキャッシュをフラッシュできますが、ehcache拡張機能を使用するときにTTLがサポートされることを期待していました。

おかげ

+0

が、httpsを参照してください:/を

例えば

、これは60秒「MyCacheという」名前付きキャッシュのに生きるために、デフォルトの時間を上書きするスクリプトです/jira.grails.org/browse/GPCACHEEHCACHE-6 –

+0

@Kenそのリンクは壊れています – GreenGiant

答えて

6

はい、cache-ehcacheプラグインは、TTLと、EhCacheによってネイティブにサポートされているすべてのキャッシュ構成プロパティを確実にサポートしています。このドキュメントで述べたように、基本キャッシュプラグインはTTLをサポートしない単純なインメモリキャッシュを実装しますが、キャッシュDSLは未知の構成設定を基になるキャッシュプロバイダに渡します。

あなたはConfig.groovyまたはCacheConfig.groovyに以下を追加することにより、Ehcacheの設定を構成することができます

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

次のようにあなたは、実行時にキャッシュ設定を確認できます。

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

は、他のためにEhCache javadoc for CacheConfigurationを参照してください。キャッシュプロパティ。キャッシングの詳細なデバッグログを有効にするには、grails.plugin.cachenet.sf.ehcacheを記録します。

Grailsのキャッシュプラグインは、固有のEhCacheキャッシュマネージャとは別の独自のキャッシュマネージャを実装しています。 EhCacheを直接(ehcache.xmlや他の手段を使用して)設定した場合、これらのキャッシュはGrailsプラグインによって管理されるキャッシュとは別に実行されます。

注:Cache-EhCacheプラグインの古いバージョンでは、TTL設定が正しく設定されておらず、オブジェクトの有効期限が1年であったバグが実際にありました。これはGrails-Cache-Ehcache 1.1で修正されました。

0

はTTLプロパティはehcacheをコアプラグインでサポートされています。どのようにプラグインをインストールしていますか?私のプロジェクトでは、私は次のものしか持っていません:BuildConfig.groovy in the plugins closure:

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 = { 
    } 
} 
関連する問題