ConfigurationProperties() 注解会把配置文件里spring.redis开头的属性,赋值给bean里对应的对象.
@Configuration
@ConditionalOnProperty({"spring.redis.hostName"})
@Import({TemplateRedisManager.class})
public class RedisConfig {
public static final String REDIS_TEMPLATE_BEAN = "xxxRedisTemplate";
public RedisConfig() {
}
@Bean
@ConfigurationProperties(prefix = "spring.redis")
public JedisPoolConfig getPoolConfig() {
JedisPoolConfig config = new JedisPoolConfig();
return config;
}
@Bean
@ConfigurationProperties(prefix = "spring.redis")
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory redisConnectionFactory = new JedisConnectionFactory();
JedisPoolConfig jedisPoolConfig = this.getPoolConfig();
redisConnectionFactory.setPoolConfig(jedisPoolConfig);
return redisConnectionFactory;
}
@Bean(name = {"xxxRedisTemplate"})
public RedisTemplate<String, Object> createRedisTemplate(JedisConnectionFactory redisConnectionFactory) {
RedisTemplate<String, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisConnectionFactory);
Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper om = new ObjectMapper();
om.setVisibility(PropertyAccessor.ALL, Visibility.ANY);
om.enableDefaultTyping(DefaultTyping.NON_FINAL);
jackson2JsonRedisSerializer.setObjectMapper(om);
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
redisTemplate.afterPropertiesSet();
return redisTemplate;
}
}
如果你的项目有多个redis,那就要再配置一个redis配置,怎么配置呢?
让另一个redis继承,直接复用父类的createRedisTemplate,省了一些重复的代码
父类有的bean,子类一定要另起名字,跟父类区分开,这才能是两套redis,仔细看子类的JedisConnectionFactory
@Configuration
public class sonRedisConfig extends RedisConfig {
@Override
@ConfigurationProperties(prefix = "redis.son")
public JedisPoolConfig getPoolConfig() {
return new JedisPoolConfig();
}
@Override
@ConfigurationProperties(prefix = "redis.son")
@Bean(name = "sonRedisFactory")
public JedisConnectionFactory redisConnectionFactory() {
JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
jedisConnectionFactory.setPoolConfig(getPoolConfig());
return jedisConnectionFactory;
}
@Override
@Bean(name = "sonRedisTemplate")
public RedisTemplate<String, Object> createRedisTemplate(@Qualifier("sonRedisFactory") JedisConnectionFactory redisConnectionFactory) {
return super.createRedisTemplate(redisConnectionFactory);
}
}