项目开发过程中,需要整合redis,在整合过程中,出现了如下的错误:
Parameter 0 of method cacheManager in org.springframework.boot.autoconfigure.cache.RedisCacheConfiguration required a bean of type 'org.springframework.data.redis.core.RedisTemplate' that could not be found.
- Bean method 'redisTemplate' in 'RedisAutoConfiguration.RedisConfiguration' not loaded because @ConditionalOnMissingBean (names: redisTemplate; SearchStrategy: all) found bean 'redisTemplate'
- Bean method 'stringRedisTemplate' in 'RedisAutoConfiguration.RedisConfiguration' not loaded because @ConditionalOnMissingBean (types: org.springframework.data.redis.core.StringRedisTemplate; SearchStrategy: all) found bean 'stringRedisTemplate'
Action:
Consider revisiting the conditions above or defining a bean of type 'org.springframework.data.redis.core.RedisTemplate' in your configuration.
错误原因:
有两个同名的bean都叫redisTemplate,导致加载失败。
解决方法:
自定义的redisTemplate改名,如下:
@Bean(name = "redisTemplateCustomize")
// @ConditionalOnMissingBean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplateCustomize(
@Qualifier("redisConnectionFactory") RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException
{
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(
Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(redisConnectionFactory);
template.setKeySerializer(jackson2JsonRedisSerializer);
template.setValueSerializer(jackson2JsonRedisSerializer);
template.setHashKeySerializer(jackson2JsonRedisSerializer);
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;
}
使用时,如下:
@Autowired
@Qualifier("redisTemplateCustomize")
private RedisTemplate redisTemplate;