SpringBoot構成RedisTemplateシーケンス化

3954 ワード

前言
最新のSpringBootに関するStarterの多くはカスタム@Configurationクラスを省略しており、代わりにアプリケーションに直接使用されている.ymlファイルの直接構成、例えばDruidはmavenがstarterを導入してアプリケーションに導入するだけです.ymlファイルを構成すればいいです.今日お話しするredisもそうです.その原因を究明するのはなぜですか.mavenが導入したstarterにはすでにコンフィギュレーションが書かれているので、この仕事に相当するStarterが私たちを手伝ってくれたので、あなたのideを開けて、ソースコードを直接確認します.
package org.springframework.boot.autoconfigure.data.redis;

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({ LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {

}
package org.springframework.boot.autoconfigure.data.redis;

import java.time.Duration;
import java.util.List;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * Configuration properties for Redis.
 *
 * @author Dave Syer
 * @author Christoph Strobl
 * @author Eddú Meléndez
 * @author Marco Aust
 * @author Mark Paluch
 * @author Stephane Nicoll
 */
@ConfigurationProperties(prefix = "spring.redis")
public class RedisProperties {
}

1、Redisの配置
Step 1アプリケーションを構成する.ymlファイル、これらのプロパティは上の2つのソースクラスで解析することができます.ここではjedisではなくlettuceを使用しています.前者のスレッドプールはスレッドが安全です.この後で説明します.
  #redis  ,    lettuce
  redis:
    timeout: 5000ms
    password:   
    database: 0
    sentinel:
      nodes: 172.13.37.84:26379,177.15.33.82:26379,172.46.36.82:26379,172.11.31.36:26379,172.14.76.57:26379
      master: master
    lettuce:
      pool:
        max-active: 8
        max-idle: 8
        min-idle: 0

Step 2にはstep 2がなく、上に配置されています.冗談ですが、上の構成が終わったらStringRedisTemplateしか使えません.他のタイプのRedisTemplateを使うにはシーケンス化も必要です.
@Configuration
public class RedisConfig {

    @Bean
    public  RedisTemplate redisTemplateKeyString(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
    /**       redisTemplate***/
    @Bean
    public RedisTemplate redisTemplateKeyObject(RedisConnectionFactory redisConnectionFactory) {
        RedisTemplate redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(redisConnectionFactory);
        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
        ObjectMapper objectMapper = new ObjectMapper();
        objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
        objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
        objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
        redisTemplate.afterPropertiesSet();
        return redisTemplate;
    }
}