栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot项目同一个类中使用Cacheable不生效

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot项目同一个类中使用Cacheable不生效

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;
    }
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272387.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号