Tii*_*ina 12 caching spring-boot
根据链接,在spring boot中使用缓存的最简单配置是使用CacheManager(缓存Map将在此类中初始化):
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
并在serviceImpl.java:
@Cacheable(cacheManager="guavaCacheManager")
@Override
public List<RoleVO> getDataForCreateNewOperator() {
...
}
Run Code Online (Sandbox Code Playgroud)
但它抛出:
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.
Run Code Online (Sandbox Code Playgroud)
编辑:如果我在cacheManager中分配一个cacheName,并在建议的方法中使用它,则异常消失.但是bean中的所有方法都将被缓存,而我只@Cacheable在一个方法上分配.
小智 5
我正在使用 Ehcache 并且我遇到了同样的问题,因为我有两个不同的缓存名称和可缓存名称。
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8619 次 |
| 最近记录: |