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を用いてマルチデータソースをシミュレートする.
    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;