【发布时间】:2017-07-21 08:22:05
【问题描述】:
根据link的说法,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;
}
}
在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。
【问题讨论】:
-
您是否尝试过这样的事情:@Cacheable(cacheNames = "cache-name") 在您的存储库方法上?
-
@Afridi 是的,我试过了,那行得通。但不是动态的,它也应该起作用。另外,使用cacheName虽然异常没有了,但是却使得整个类都可以缓存,不仅仅是方法。
标签: caching spring-boot