乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Spring Boot 多數(shù)據(jù)源 Redis 配置

       行者花雕 2020-02-13

      概述

      本文基于spring boot 2.0.7,講解如何配置多數(shù)據(jù)源redis,采用lettuce做為redis客戶端,并附上示例代碼。

      redis配置

      配置文件

      skyarthur:
        redis1:
          host: 127.0.0.1
          port: 6378
          lettuce:
            pool:
              min-idle: 5
              max-idle: 10
              max-active: 8
              max-wait: 1ms
            shutdown-timeout: 100ms
        redis2:
          host: 127.0.0.1
          port: 6379
          lettuce:
            pool:
              min-idle: 5
              max-idle: 10
              max-active: 8
              max-wait: 1ms
            shutdown-timeout: 100ms

      共配置2個(gè)redis數(shù)據(jù)源,并采用 lettuce pool 做為redis客戶端

      配置類

      package com.skyarthur.springboot.config;
      
      import io.lettuce.core.resource.ClientResources;
      import io.lettuce.core.resource.DefaultClientResources;
      import lombok.Getter;
      import lombok.Setter;
      import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
      import org.springframework.beans.factory.annotation.Qualifier;
      import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
      import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
      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.RedisPassword;
      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.StringRedisTemplate;
      
      /**
       * Created by skyarthur on 2019-12-21
       */
      
      @Configuration
      @ConfigurationProperties(prefix = "skyarthur")
      @Getter
      @Setter
      public class RedisConfig {
      
          private RedisProperties redis1;
          private RedisProperties redis2;
      
          @Bean(destroyMethod = "shutdown")
          @ConditionalOnMissingBean(ClientResources.class)
          public DefaultClientResources lettuceClientResources() {
              return DefaultClientResources.create();
          }
      
          @Bean(name = "stringRedisTemplate1")
          @Primary
          public StringRedisTemplate stringRedisTemplate1(
                  @Qualifier("Redis1LettuceConnectionFactory") RedisConnectionFactory redisConnectionFactory) {
              StringRedisTemplate template = new StringRedisTemplate();
              template.setConnectionFactory(redisConnectionFactory);
              return template;
          }
      
          @Bean(name = "Redis1LettuceConnectionFactory")
          @Primary
          public LettuceConnectionFactory Redis1LettuceConnectionFactory(ClientResources clientResources) {
              RedisStandaloneConfiguration redis1StandaloneConfiguration = getStandaloneConfig(redis1);
              LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(clientResources, redis1);
              return new LettuceConnectionFactory(redis1StandaloneConfiguration, clientConfig);
          }
      
          @Bean(name = "stringRedisTemplate2")
          public StringRedisTemplate stringRedisTemplate2(
                  @Qualifier("Redis2LettuceConnectionFactory") RedisConnectionFactory redisConnectionFactory) {
              StringRedisTemplate template = new StringRedisTemplate();
              template.setConnectionFactory(redisConnectionFactory);
              return template;
          }
      
          @Bean(name = "Redis2LettuceConnectionFactory")
          public LettuceConnectionFactory Redis2LettuceConnectionFactory(ClientResources clientResources) {
              RedisStandaloneConfiguration redis1StandaloneConfiguration = getStandaloneConfig(redis2);
              LettuceClientConfiguration clientConfig = getLettuceClientConfiguration(clientResources, redis2);
              return new LettuceConnectionFactory(redis1StandaloneConfiguration, clientConfig);
          }
      
      
          /**
           * redis standalone config
           *
           * @param redisProperties redis 配置參數(shù)
           * @return RedisStandaloneConfiguration
           */
          private RedisStandaloneConfiguration getStandaloneConfig(RedisProperties redisProperties) {
              RedisStandaloneConfiguration config = new RedisStandaloneConfiguration();
              config.setHostName(redisProperties.getHost());
              config.setPort(redisProperties.getPort());
              config.setPassword(RedisPassword.of(redisProperties.getPassword()));
              config.setDatabase(redisProperties.getDatabase());
              return config;
          }
      
          /**
           * 構(gòu)建 LettuceClientConfiguration
           *
           * @param clientResources clientResources
           * @param redisProperties redisProperties
           * @return LettuceClientConfiguration
           */
          private LettuceClientConfiguration getLettuceClientConfiguration(ClientResources clientResources,
                                                                           RedisProperties redisProperties) {
              LettuceClientConfiguration.LettuceClientConfigurationBuilder builder =
                      createBuilder(redisProperties.getLettuce().getPool());
              if (redisProperties.isSsl()) {
                  builder.useSsl();
              }
              if (redisProperties.getTimeout() != null) {
                  builder.commandTimeout(redisProperties.getTimeout());
              }
              if (redisProperties.getLettuce() != null) {
                  RedisProperties.Lettuce lettuce = redisProperties.getLettuce();
                  if (lettuce.getShutdownTimeout() != null
                          && !lettuce.getShutdownTimeout().isZero()) {
                      builder.shutdownTimeout(
                              redisProperties.getLettuce().getShutdownTimeout());
                  }
              }
              builder.clientResources(clientResources);
              return builder.build();
          }
      
          /**
           * 創(chuàng)建 LettuceClientConfigurationBuilder
           *
           * @param pool 連接池配置
           * @return LettuceClientConfigurationBuilder
           */
          private LettuceClientConfiguration.LettuceClientConfigurationBuilder createBuilder(RedisProperties.Pool pool) {
              if (pool == null) {
                  return LettuceClientConfiguration.builder();
              }
              return LettucePoolingClientConfiguration.builder()
                      .poolConfig(getPoolConfig(pool));
          }
      
          /**
           * pool config
           *
           * @param properties redis 參數(shù)配置
           * @return GenericObjectPoolConfig
           */
          private GenericObjectPoolConfig getPoolConfig(RedisProperties.Pool properties) {
              GenericObjectPoolConfig config = new GenericObjectPoolConfig();
              config.setMaxTotal(properties.getMaxActive());
              config.setMaxIdle(properties.getMaxIdle());
              config.setMinIdle(properties.getMinIdle());
              if (properties.getMaxWait() != null) {
                  config.setMaxWaitMillis(properties.getMaxWait().toMillis());
              }
              return config;
          }
      }
      

      以上配置主要參考 spring 官方配置 RedisAutoConfiguration, LettuceConnectionConfiguration。簡(jiǎn)單來說:RedisAutoConfiguration注冊(cè)了2個(gè)bean,RedisTemplateStringRedisTemplate,這兩個(gè)bean又依賴RedisConnectionFactory的注入,在RedisAutoConfiguration可以看到,RedisConnectionFactory有兩個(gè)實(shí)現(xiàn),LettuceConnectionFactoryJedisConnectionFactory,具體可以直接參考官方配置LettuceConnectionConfiguration

      單測(cè)

      package com.skyarthur.springboot.config;
      
      import com.skyarthur.springboot.ApplicationTests;
      import com.skyarthur.springboot.common.enums.RedisType;
      import org.junit.Assert;
      import org.junit.Test;
      import org.springframework.beans.factory.annotation.Autowired;
      import org.springframework.beans.factory.annotation.Qualifier;
      import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
      import org.springframework.data.redis.core.StringRedisTemplate;
      
      /**
       * Created by skyarthur on 2019-12-21
       */
      
      public class RedisConfigTest extends ApplicationTests {
      
          @Autowired
          @Qualifier("stringRedisTemplate1")
          private StringRedisTemplate stringRedisTemplate1;
      
          @Autowired
          @Qualifier("stringRedisTemplate2")
          private StringRedisTemplate stringRedisTemplate2;
      
          @Test
          public void test() {
              LettuceConnectionFactory factory = (LettuceConnectionFactory) stringRedisTemplate1.getConnectionFactory();
              Assert.assertNotNull(factory);
              Assert.assertEquals(6378, factory.getPort());
              Assert.assertEquals("127.0.0.1", factory.getHostName());
              factory = (LettuceConnectionFactory) stringRedisTemplate2.getConnectionFactory();
              Assert.assertNotNull(factory);
              Assert.assertEquals(6379, factory.getPort());
              Assert.assertEquals("127.0.0.1", factory.getHostName());
      
              stringRedisTemplate1.opsForValue().set(RedisType.PERSON_INFO.getRealKey("test"), "6378");
              stringRedisTemplate2.opsForValue().set("test", "6379");
      
              Assert.assertEquals("6378", stringRedisTemplate1.opsForValue().get(RedisType.PERSON_INFO.getRealKey("test")));
              Assert.assertEquals("6379", stringRedisTemplate2.opsForValue().get("test"));
          }
      }

      示例代碼

      • 代碼示例
      • 多數(shù)據(jù)源redis配置commit

      參考文檔

      • https:///post/5ba0a0...
      • https://fastdep....
      • https://www.jianshu.com/p/5b0...

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多