2017-12-19 2 views
1

以下はspringにcachename "simpleCache"を持つ簡単なConcurrentHashMapを自動的に生成するように指示します。キャッシュの自動設定を維持しながらカスタム@キャッシュ可能なキャッシュを追加するにはどうすればよいですか?

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

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

} 

質問:私は定義された自己期限が切れる時間を持っている唯一のキャッシュを、追加したいが、私は使用する他のすべての@Cacheableのために自動設定スプリングハッシュマップに依存したい場合は何?

以下はキャッシュを作成します。

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

しかし:whan私は今、自分のアプリケーションを起動し、他のすべて一度自動設定のキャッシュはで失敗:

java.lang.IllegalArgumentException: Cannot find cache named 'simpleCache' for Builder ...のみcaffeingキャッシュ明示的に設定された作品。

したがって、カスタムキャッシュを明示的に追加している間に、自動設定されたキャッシュを保持するにはどうすればよいですか?

は、もちろん私は手動でこれらの簡単なキャッシュを追加することもできますが、私はそれらを自動設定するために、スプリング好む:

@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名です。おそらくあなたはそれを明示的に宣言する必要があります:

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

私は間違っています:selfexpireCacheは期待通りに動作し、カフェインで設定されています。正常に自動設定された 'ConcurrentHashMap'キャッシュ' somecache'はもう初期化されません。明示的にカフェインキャッシュを定義していないキャッシュをまだ初期化するよう春に指示したいと思います。 – membersound

+1

あなたのコメントと編集に基づいて私の回答を書き直しました – dpr

+0

@ mememoundあなたはまだ別の答えを探していますか?この回答のどの部分がうまくいかないか、あまりにも複雑ですか? – dpr

関連する問題