当调用使用@Cacheable(org.springframework.cache.annotation.Cacheable)注释的方法时,存在于另一个(第三方)项目中会导致以下错误。
Mapper.Initialize(cfg => {
cfg.CreateMap<Address, AddressDTO>();
//cfg.CreateMap<Customer, RegisterViewModel>();
});
第三方项目方法的注释如下
java.lang.IllegalArgumentException: Cannot find cache named 'usersCache' for CacheableOperation[public com.epsilon.amp.infra.model.AuthUser com.epsilon.amp.infra.dao.ContextDao.loadContextUser(java.lang.String,java.lang.String)] caches=[usersCache] | key='' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='' | unless=''
在我的项目中添加注释和启用缓存并不能解决问题。什么可能出错?
答案 0 :(得分:2)
我建议你创建一个像这样的配置:
@Configuration
public class CacheService extends CachingConfigurerSupport {
@Bean
public CacheManager cacheManager() {
ConcurrentMapCacheManager cacheManager = new ConcurrentMapCacheManager() {
@Override
protected Cache createConcurrentMapCache(final String name) {
return new ConcurrentMapCache(name,
CacheBuilder.newBuilder().expireAfterWrite(30, TimeUnit.MINUTES).maximumSize(100).build().asMap(), false);
}
};
return cacheManager;
}
@Bean
@Primary
public CacheManager guavaCacheManager() {
return new GuavaCacheManager();
}
}
之后,您必须在要缓存方法的类的头部添加此注释。
@Cacheable(cacheNames = "guavaCacheManager")
在Application类的头部,这个注释:@EnableCaching