1.原因:Cacheable默认使用aop代理方式,通过创建内部类形式实现,而同一个类中调用无法通过代理,所以缓存不生效
2.解决方法:在当前类中注入该类的bean对象,通过当前对象的代理对象实现缓存
public class CacheManagerService {
private static Logger logger= LoggerFactory.getLogger(CacheManagerService.class);
@Resource
private CacheManagerMapper cacheManagerMapper;
//注入当前对象的代理对象
@Resource
private CacheManagerService cacheManagerService;
@Cacheable(cacheNames = "cacheManager",key ="#key.code")
public List getAllEnumTypeList(EnumCacheKey key){
try {
DbRouteSet.setDataSourceKey("1");
List allEnumTypeList = cacheManagerMapper.getAllEnumTypeList();
return allEnumTypeList;
}catch (Exception e){
logger.error("获取所有枚举对象存入cache缓存出现异常",e);
}
return null;
}
public String getEnumTypeName(String type,String value){
try {
//Cacheable默认使用aop代理,所以同一个类中使用cache缓存失效,需要使用当前对象的代理对象访问
List enumTypeList = cacheManagerService.getAllEnumTypeList(EnumCacheKey.PartEnumTypeInfo);
List list = enumTypeList.stream().filter(t -> t.getType().equals(type) && t.getValue().equals(value)).collect(Collectors.toList());
if (list!=null && list.size()>0){
return list.get(0).getName();
}
}catch (Exception e){
logger.error("获取枚举对象名称出现异常,枚举对象类型{},编号{},",type,value,e);
}
return null;
}



