web-dev-qa-db-ja.com

SpringブートキャッシュBuilderのキャッシュを解決できませんでした

link によると、Spring Bootでキャッシュを使用する最も簡単な構成は、CacheManagerを使用しています(キャッシュマップはこのクラスで初期化されます)。

@Configuration
@EnableCaching
public class CacheService extends CachingConfigurerSupport {
    @Bean
    public CacheManager concurrentMapCacheManager() {
        ConcurrentMapCacheManager cmcm = new ConcurrentMapCacheManager();
        return cmcm;
    }

    @Bean
    @Primary
    public CacheManager guavaCacheManager() {
        GuavaCacheManager gcm = new GuavaCacheManager();
        return gcm;
    }
}

serviceImpl.Java

 @Cacheable(cacheManager="guavaCacheManager")
 @Override
 public List<RoleVO> getDataForCreateNewOperator() {
  ...
 }

しかし、それは投げます:

Java.lang.IllegalStateException: No cache could be resolved for 'Builder[public Java.util.List getDataForCreateNewOperator()] caches=[] | key='' | keyGenerator='' | cacheManager='guavaCacheManager' | cacheResolver='' | condition='' | unless='' | sync='false'' using resolver 'org.springframework.cache.interceptor.SimpleCacheResolver@38466d10'. At least one cache should be provided per cache operation.

編集:cacheManagerでcacheNameを割り当て、それを推奨されたメソッドで使用すると、例外はなくなります。しかし、Beanのすべてのメソッドはキャッシュされますが、私は@Cacheable 1つのメソッド。

12
Tiina

私はEhcacheを使用していますが、キャッシュとCacheableに2つの異なる名前があるため、同じ問題が発生しました。

Please make you use same name for cache and Cacheable.

@Cacheable("codetable")

<cache name="codetable"
        maxEntriesLocalHeap="100"
        maxEntriesLocalDisk="1000"
        eternal="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        memoryStoreEvictionPolicy="LFU"
        transactionalMode="off">
        <persistence strategy="localTempSwap" />
    </cache>
4
Bibhuti