SpringCache KeyGenerator 重复生成,且带有$$EnhancerBySpringCGLIB$$字样

尝试使用SpringCache + redis 实现注解缓存时,遇到如题问题,核心代码如下

@Configuration 配置下的KeyGenerator

@Bean
public KeyGenerator customKeyGenerator() {
    return (o, method, objects) -> {
        StringBuilder sb = new StringBuilder();
        sb.append(o.getClass().getName()); //获取访问路径全名
        log.info("访问路径名:" + o.getClass().getName());
        sb.append(":").append(method.getName());//获取访问方法名
        log.info("访问方法名:" + method.getName());
        for (Object object : objects) {
            if (ObjectUtils.isNotEmpty(object)) {
                sb.append(":").append(object.toString());
            }
        }
        return sb.toString();
 };
}

@Configuration 配置下的 cacheManager

@Bean
public RedisCacheManager cacheManager(RedisConnectionFactory connectionFactory) {
    RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig()
            .entryTtl(Duration.ofMinutes(6))//过期时间 使用Duration,可设置类型
            .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new GenericFastJsonRedisSerializer()))//value 序列化 或 GenericJackson2JsonRedisSerializer .disableCachingNullValues();//不允许存储空值
     return RedisCacheManager.builder(connectionFactory)
            .cacheDefaults(config)
            .transactionAware()
            .build();
}

用法如下

image.png

日志打印如下

image.png

对,你没有看错,我发一次请求,执行了四次,原因尚未明确,请问是否有遇到过该问题的人,希望能解答下

注:包版本如下
org.springframework.boot:spring-boot-starter-cache:2.3.5.RELEASE

阅读 4.5k
2 个回答

右边栏相似问题,直接弹出一个几乎一摸一样的问题,而且楼主已经把问题和解决方案解释的非常清楚了,是 shiro-spring-boot-starter 依赖下动态代理类 DefaultAdvisorAutoProxyCreator 引发的

@Bean
public DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator(){
    DefaultAdvisorAutoProxyCreator advisorAutoProxyCreator = new DefaultAdvisorAutoProxyCreator();
    return advisorAutoProxyCreator;
}

具体解释查看这个问题 SpirngBoot 整合 Shiro + Redis 时出现缓存 EnhancerBySpringCGLIB 代理重复生成问题

参考一篇文章
https://blog.csdn.net/qq_4226...
properties中设置
spring.aop.proxy-target-class=false
解决了获取类名带有SpringBooCGLIB$$的问题

至于另外一个keyGenerator为何执行两次,暂未知晓。
2021年4月10日22点25分

推荐问题
宣传栏