未命名x 2022-07-20 09:29
浏览 14
已结题

子模块cache缓存失效

问题遇到的现象和发生背景

在多模块的项目当中,使用注解的形式进行redis缓存,主模块的项目正常缓存,子模块的项目@Cacheable注解失效了。

问题相关代码,请勿粘贴截图

model-starter(主模块,负责启动项目与配置redis缓存)正常缓存
Application
starter
RedisConfig

 @EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
    @Bean
    public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        template.setConnectionFactory(factory);
        //key序列化方式
        template.setKeySerializer(redisSerializer);
        //value序列化
        template.setValueSerializer(jackson2JsonRedisSerializer);
        //value hashmap序列化
        template.setHashValueSerializer(jackson2JsonRedisSerializer);
        return template;
    }

    @Bean
    public CacheManager cacheManager(RedisConnectionFactory factory) {
        RedisSerializer<String> redisSerializer = new StringRedisSerializer();
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        //解决查询缓存转换异常的问题
        ObjectMapper om = new ObjectMapper();
        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        jackson2JsonRedisSerializer.setObjectMapper(om);
        // 配置序列化(解决乱码的问题),过期时间600秒
        RedisCacheConfiguration config = RedisCacheConfiguration
                .defaultCacheConfig()
                .entryTtl(Duration.ofSeconds(600))
                .serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(redisSerializer))
                .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer))
                .disableCachingNullValues();

        RedisCacheManager cacheManager = RedisCacheManager.builder(factory)
                .cacheDefaults(config)
             // 可以给每个cacheName不同的RedisCacheConfiguration  设置不同的过期时间
            //.withCacheConfiguration("Users",config.entryTtl(Duration.ofSeconds(100)))
                .transactionAware()
                .build();
        return cacheManager;
    }
}

ServiceImpl



@Cacheable("name")
getName(String name)

model-common 缓存失效
ServiceImpl

@Cacheable("name")
getName(String name)
运行结果及报错内容

启动模块正常缓存,子模块没有进行缓存,而是每次都直接访问书库

我的解答思路和尝试过的方法

我尝试在RedisConfig中添加componentScan(“cn.com”)
无效
子模块的包扫描类中添加该package
继承 ImportBeanDefinitionRegistrar
无效

我想要达到的结果

不管是子模块还是主模块都能达到通过@Cacheable注解将数据缓存的redis

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 7月28日
    • 修改了问题 7月20日
    • 创建了问题 7月20日

    悬赏问题

    • ¥15 r语言xlsx包下载后使用时出现了下列问题该如何解决
    • ¥15 Arcgis河网分级报错
    • ¥200 java+appium2.1+idea
    • ¥20 请帮我做一个EXE的去重TXT文本
    • ¥15 工价表引用工艺路线,应如何制作py和xml文件
    • ¥15 根据历史数据,推荐问题类型
    • ¥15 需要仿真图,简单的二阶系统实例
    • ¥15 stm32光控照明仿真
    • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
    • ¥15 SENT协议中相关问题咨询