SpringBoot構成RedisTemplateシーケンス化
3954 ワード
前言
最新のSpringBootに関するStarterの多くはカスタム@Configurationクラスを省略しており、代わりにアプリケーションに直接使用されている.ymlファイルの直接構成、例えばDruidはmavenがstarterを導入してアプリケーションに導入するだけです.ymlファイルを構成すればいいです.今日お話しするredisもそうです.その原因を究明するのはなぜですか.mavenが導入したstarterにはすでにコンフィギュレーションが書かれているので、この仕事に相当するStarterが私たちを手伝ってくれたので、あなたのideを開けて、ソースコードを直接確認します.
1、Redisの配置
Step 1アプリケーションを構成する.ymlファイル、これらのプロパティは上の2つのソースクラスで解析することができます.ここではjedisではなくlettuceを使用しています.前者のスレッドプールはスレッドが安全です.この後で説明します.
Step 2にはstep 2がなく、上に配置されています.冗談ですが、上の構成が終わったらStringRedisTemplateしか使えません.他のタイプのRedisTemplateを使うにはシーケンス化も必要です.
最新の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