实现 redisTemplate 的自动装配

可以看到 Redis Auto Config 的 自动装配 redis template

copy一份 到自己的 配置类中

这下就可以开始我们的自动装配工作了

一下分别提供了两种,

First : Autoried 一个redisTemplate,对其进行后续装配

Second:重写自动装配到方法,自己构造 redisTemplate

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Configuration
public class RedisTemplateConfig {

@Bean(name = "redisTemplate")
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory factory) {
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(factory);
Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();

// 允许访问对象中的所有属性
om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.WRAPPER_ARRAY);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
// key采用String的序列化方式
template.setKeySerializer(stringRedisSerializer);
// hash的key也采用String的序列化方式
template.setHashKeySerializer(stringRedisSerializer);
// value序列化方式采用jackson
template.setValueSerializer(jackson2JsonRedisSerializer);
// hash的value序列化方式采用jackson
template.setHashValueSerializer(jackson2JsonRedisSerializer);
template.afterPropertiesSet();
return template;

}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@Configuration
public class RedisTemplateConfig {
@Autowired
public RedisTemplateConfig( RedisTemplate redisTemplate){

Jackson2JsonRedisSerializer<Object> objectJackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);

ObjectMapper mapper = new ObjectMapper();

// 允许访问对象中的所有属性
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.activateDefaultTyping(LaissezFaireSubTypeValidator.instance,ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.WRAPPER_ARRAY);
objectJackson2JsonRedisSerializer.setObjectMapper(mapper);

redisTemplate.setKeySerializer(new StringRedisSerializer());
redisTemplate.setValueSerializer(objectJackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
}

}

这里的这个注解,@SuppressWarnings(“SpringJavaInjectionPointsAutowiringInspection”)

去disable IDEA 的inspection ;

Application.yml for redis

很简单,没有用到reids 的线程池

后续 TODO

1
2
3
4
5
spring:
redis:
port: 6379
host: 127.0.0.1
database: 0

RedisUtil

关于redis 的工具类 ,暂时不需要 redisTemplate的 API 够用