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つのメソッド。
私は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>