Spring boot 2.1学習ノート【十】SpringBoot 2統合redisマルチデータソース
Springbootシリーズ学習ノートすべての文章は値ブロガーコラム*:spring boot 2に移動してください.X/spring cloud Greenwich. 一連の文章なので、後の文章は前の文章の項目に使われる可能性があります.SpringbootシリーズコードはすべてGitHubにアップロードされます.https://github.com/liubenlong/springboot2_demo本シリーズ環境:Java 11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;
文書ディレクトリマルチデータソース構成 1つのプロジェクトで複数のredisデータソースにアクセスする場合があります.ここでspringboot 2をシミュレートします.1+redisマルチデータソースの構成
マルチデータソース構成
ここでは異なるdatebaseを用いてマルチデータソースをシミュレートする.
マルチデータソースを使用しているため、デフォルトのspringbootを使用してロード初期化することはできません.ここではカスタムconfigを使用して実装する必要があります.
ここではlettuce接続プールの構成が必要です->LettuceConnectionFactory->RedisTemplate
使用も簡単です.
lettuceデータソースについては、後述します.
Springbootシリーズ学習ノートすべての文章は値ブロガーコラム*:spring boot 2に移動してください.X/spring cloud Greenwich. 一連の文章なので、後の文章は前の文章の項目に使われる可能性があります.SpringbootシリーズコードはすべてGitHubにアップロードされます.https://github.com/liubenlong/springboot2_demo本シリーズ環境:Java 11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;
文書ディレクトリ
マルチデータソース構成
ここでは異なるdatebaseを用いてマルチデータソースをシミュレートする.
spring:
redis:
host: 127.0.0.1
port: 6379
database: 0
lettuce:
pool:
max-active: 200 # ( )
max-idle: 20 #
min-idle: 5 #
# IDEA , , org.springframework.boot.autoconfigure.data.redis.RedisProperties.Pool.setMaxWait(Duration maxWait)
# Duration,IDEA ,
max-wait: 2000 # , , , ,
redis2:
host: 127.0.0.1
port: 6379
database: 1
マルチデータソースを使用しているため、デフォルトのspringbootを使用してロード初期化することはできません.ここではカスタムconfigを使用して実装する必要があります.
ここではlettuce接続プールの構成が必要です->LettuceConnectionFactory->RedisTemplate
import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;
@Configuration
public class SpringbootConfig {
/**
* lettuce
*
* @return
*/
@Bean
@ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
public GenericObjectPoolConfig redisPool() {
return new GenericObjectPoolConfig<>();
}
/**
*
*
* @return
*/
@Bean
@ConfigurationProperties(prefix = "spring.redis")
public RedisStandaloneConfiguration redisConfig() {
return new RedisStandaloneConfiguration();
}
/**
*
*
* @return
*/
@Bean
@ConfigurationProperties(prefix = "spring.redis2")
public RedisStandaloneConfiguration redisConfig2() {
return new RedisStandaloneConfiguration();
}
/**
*
* : @Primary bean , LettuceConnectionFactory
*
* @param config
* @param redisConfig
* @return
*/
@Bean("factory")
@Primary
public LettuceConnectionFactory factory(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig) {
LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
return new LettuceConnectionFactory(redisConfig, clientConfiguration);
}
@Bean("factory2")
public LettuceConnectionFactory factory2(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig2) {
LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
return new LettuceConnectionFactory(redisConfig2, clientConfiguration);
}
/**
* RedisTemplate
* : =factory RedisConnectionFactory
* @Primary
*
* @param factory
* @return
*/
@Bean("redisTemplate")
@Primary
public RedisTemplate<String, String> redisTemplate(@Qualifier("factory") RedisConnectionFactory factory) {
return getStringStringRedisTemplate(factory);
}
/**
* RedisTemplate
* : =factory2 RedisConnectionFactory
*
* @param factory2
* @return
*/
@Bean("redisTemplate2")
public RedisTemplate<String, String> redisTemplate2(@Qualifier("factory2") RedisConnectionFactory factory2) {
return getStringStringRedisTemplate(factory2);
}
/**
* ( )
*
* @param factory2
* @return
*/
private RedisTemplate<String, String> getStringStringRedisTemplate(RedisConnectionFactory factory2) {
StringRedisTemplate template = new StringRedisTemplate(factory2);
template.setKeySerializer(RedisSerializer.string());
template.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
template.setHashKeySerializer(RedisSerializer.string());
template.setHashValueSerializer(new FastJsonRedisSerializer<>(Object.class));
return template;
}
}
使用も簡単です.
/**
* @Primary RedisTemplate
*/
@Autowired
private RedisTemplate redisTemplate;
@Autowired
@Qualifier("redisTemplate2")
private RedisTemplate redisTemplate2;
lettuceデータソースについては、後述します.
Springbootシリーズ学習ノートすべての文章は値ブロガーコラム*:spring boot 2に移動してください.X/spring cloud Greenwich. 一連の文章なので、後の文章は前の文章の項目に使われる可能性があります.SpringbootシリーズコードはすべてGitHubにアップロードされます.https://github.com/liubenlong/springboot2_demo本シリーズ環境:Java 11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;