问题遇到的现象和发生背景
在多模块的项目当中,使用注解的形式进行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