springboot配置多数据源redis

相对于redis的集群配置 这篇文章相对比较死板。用于学习redis集群配置的一个过渡

现在application.yml中配置redis链接属性文件

 redis:
    host: ${ip}   //输入你要填入的IP地址
    password: password
    port: 6379
    timeout: 3000
    database: 10  #可不配,因为底层默认值为6379
    pool:
      max-active: -1 # 连接池最大连接数(使用负值表示没有限制)
      max-wait: -1  # 连接池最大阻塞等待时间(使用负值表示没有限制)
      max-idle: 8  # 连接池中的最大空闲连接
      min-idle: 0  # 连接池中的最小空闲连接
  redis2:
    host: ${ip1}
    password: password1
    port: 6379
    timeout: 3000
    database: 10  #可不配,因为底层默认值为6379

如果
redis2:
host: ${ip1}
password: password1
port: 6379
timeout: 3000
database: 10 #可不配,因为底层默认值为6379
数据源的数据在配置文件中获取不到 可以单独写一个公共配置文件获取多个配置文件数据
例如 filebase.properties 文件

spring.redis2.host: 127.0.0.1
spring.redis2.port: 6379
spring.redis2.password: 131540
spring.redis2.timeout:  3000
spring.redis2.database: 3

实现配置redis工厂链接池

package com.longyao.petrochina.config.redis;

import com.alibaba.druid.util.StringUtils;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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.jedis.JedisClientConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
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.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component;
import redis.clients.jedis.JedisPoolConfig;

import java.time.Duration;

/**
 * @Author: cq
 * @Date: 2020/9/7 17:44
 * @Version 1.0
 */

@EnableCaching
@Configuration
public class RedisBatchConfig {

    @Value("${spring.redis.pool.max-active}")
    private Integer redisPoolMaxActive;

    @Value("${spring.redis.pool.max-wait}")
    private Integer redisPoolMaxWait;

    @Value("${spring.redis.pool.max-idle}")
    private Integer redisPoolMaxIdle;

    @Value("${spring.redis.pool.min-idle}")
    private Integer redisPoolMinIdle;

    @Value("${spring.redis2.host}")
    private String host;

    @Value("${spring.redis2.port}")
    private Integer port;

    @Value("${spring.redis2.password}")
    private String password;

    @Value("${spring.redis2.timeout}")
    private String timeOut;

    @Value("${spring.redis2.database}")
    private Integer database;

    @Value("${spring.redis.host}")
    private String host0;

    @Value("${spring.redis.port}")
    private Integer port0;

    @Value("${spring.redis.password}")
    private String password0;

    @Value("${spring.redis.timeout}")
    private String timeOut0;

    @Value("${spring.redis.database}")
    private Integer database0;

/*****************************单机版********************************/

//    /**
//     * 配置redis 工厂
//     * @return
//     */
//    @Bean("batchConnectionFactory")
//    public LettuceConnectionFactory batchConnectionFactory() {
//        RedisStandaloneConfiguration redisStandaloneConfiguration =
//                new RedisStandaloneConfiguration();
//        redisStandaloneConfiguration.setHostName(host);
//        redisStandaloneConfiguration.setDatabase(database);
//        redisStandaloneConfiguration.setPassword(password);
//        redisStandaloneConfiguration.setPort(port);
//
//        return this.getLettuceConnectionFactory(redisStandaloneConfiguration);
//    }
//
//    /**
//     * 配置redis
//     * @param batchConnectionFactory
//     * @return
//     */
//    @Bean("batchRedisTemplate")
//    @ConditionalOnBean(name = "batchRedisTemplate")
//    public RedisTemplate<String, Object> batchRedisTemplate(@Qualifier("batchConnectionFactory") LettuceConnectionFactory batchConnectionFactory) {
//        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<String, Object>();
//        redisTemplate.setConnectionFactory(batchConnectionFactory);
//        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<Object>(Object.class);
//        ObjectMapper om = new ObjectMapper();
//        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        jackson2JsonRedisSerializer.setObjectMapper(om);
//        RedisSerializer<?> stringSerializer = new StringRedisSerializer();
//        redisTemplate.setKeySerializer(stringSerializer);
//        redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer);
//        redisTemplate.afterPropertiesSet();
//        redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
//        redisTemplate.setHashKeySerializer(stringSerializer);
//
//        return redisTemplate;
//        }
//
//    /**
//     * 公共数据封装
//     */
//    private LettuceConnectionFactory getLettuceConnectionFactory(RedisStandaloneConfiguration redisStandaloneConfiguration){
//        GenericObjectPoolConfig genericObjectPoolConfig =
//                new GenericObjectPoolConfig();
//        genericObjectPoolConfig.setMaxIdle(redisPoolMaxIdle);
//        genericObjectPoolConfig.setMinIdle(redisPoolMinIdle);
//        genericObjectPoolConfig.setMaxTotal(redisPoolMaxActive);
//        genericObjectPoolConfig.setMaxWaitMillis(redisPoolMaxWait);
//        LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder
//                builder =  LettucePoolingClientConfiguration.builder().
//                commandTimeout(Duration.ofMillis(Integer.parseInt(timeOut)));
//        builder.poolConfig(genericObjectPoolConfig);
//        LettuceClientConfiguration lettuceClientConfiguration = builder.build();
//        //根据配置和客户端配置创建连接
//        LettuceConnectionFactory lettuceConnectionFactory = new
//                LettuceConnectionFactory(redisStandaloneConfiguration,lettuceClientConfiguration);
//        lettuceConnectionFactory .afterPropertiesSet();
//        return lettuceConnectionFactory;
//    }

/*****************************多机版本********************************/
    /**
     * 配置redis工厂
     * @param host
     * @param port
     * @param password
     * @param minIdle
     * @param maxIdle
     * @param maxTotal
     * @param maxWaitMillis
     * @param dataBase
     * @return
     */
    public RedisConnectionFactory connectionFactory(String host, int port, String password, int minIdle,int maxIdle,
                                                    int maxTotal, long maxWaitMillis, int dataBase) {
          //spring 2.*版本之前         
//        JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory();
//        jedisConnectionFactory.setHostName(host);
//        jedisConnectionFactory.setPort(port);
//
//        if (!StringUtils.isEmpty(password)) {
//            jedisConnectionFactory.setPassword(password);
//        }
//
//        if (dataBase != 0) {
//            jedisConnectionFactory.setDatabase(dataBase);
//        }
//
//        jedisConnectionFactory.setPoolConfig(poolConfig(minIdle,maxIdle, maxTotal, maxWaitMillis, false));
//        jedisConnectionFactory.afterPropertiesSet();

        //spring 2.*版本
        RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
        redisStandaloneConfiguration.setDatabase(dataBase);
        redisStandaloneConfiguration.setHostName(host);
        redisStandaloneConfiguration.setPassword(RedisPassword.of(password));
        redisStandaloneConfiguration.setPort(port);

        JedisClientConfiguration.JedisClientConfigurationBuilder jedisClientConfigurationBuilder = JedisClientConfiguration.builder();
        JedisClientConfiguration jedisClientConfiguration = jedisClientConfigurationBuilder
                .usePooling().poolConfig(this.poolConfig(minIdle,maxIdle,maxTotal,maxWaitMillis,false)).build();
        return new JedisConnectionFactory(redisStandaloneConfiguration,jedisClientConfiguration);
    }

    //连接池配置
    public JedisPoolConfig poolConfig(int minIdle,int maxIdle, int maxTotal, long maxWaitMillis, boolean testOnBorrow) {
        JedisPoolConfig poolConfig = new JedisPoolConfig();
        poolConfig.setMaxIdle(maxIdle);
        poolConfig.setMinIdle(minIdle);
        poolConfig.setMaxTotal(maxTotal);
        poolConfig.setMaxWaitMillis(maxWaitMillis);
        poolConfig.setTestOnBorrow(testOnBorrow);
        poolConfig.setNumTestsPerEvictionRun(10);
        return poolConfig;
    }


    //------------------------------------
    @Bean(name = "redisOrderTemplate")
    public StringRedisTemplate redisOrderTemplate() {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(
                connectionFactory(host, port, password, redisPoolMinIdle,redisPoolMaxIdle, redisPoolMaxActive, redisPoolMaxWait, database));
        return template;
    }

    //------------------------------------
    @Bean(name = "redisUserTemplate")
    public StringRedisTemplate userUserTemplate() {
        StringRedisTemplate template = new StringRedisTemplate();
        template.setConnectionFactory(
                connectionFactory(host0, port0, password0, redisPoolMinIdle,redisPoolMaxIdle, redisPoolMaxActive, redisPoolMaxWait, database0));
        return template;
    }

}

//spring 2.*版本和之前版本链接我都写在了上面 两者使用没有多大的区别可能看我的另一篇文章解释
https://blog.csdn.net/cq__cy/article/details/108467914

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Spring Boot中配置多个Redis数据源需要做以下几个步骤: 1. 在pom.xml中添加Redis和Lettuce的依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <dependency> <groupId>io.lettuce</groupId> <artifactId>lettuce-core</artifactId> </dependency> ``` 2. 在application.yml中配置多个Redis数据源,例如: ```yaml spring: redis: host: localhost port: 6379 password: password database: 0 jedis: pool: max-active: 8 max-idle: 8 min-idle: 0 max-wait: -1ms redis2: host: localhost port: 6380 password: password database: 1 lettuce: pool: max-active: 8 max-idle: 8 min-idle: 0 max-wait: -1ms ``` 注意,每个Redis数据源需要定义一个唯一的名称,如redisredis2。 3. 在Java代码中创建多个RedisTemplate实例,并指定对应的RedisConnectionFactory,例如: ```java @Configuration public class RedisConfig { @Bean(name = "redisTemplate") public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); return redisTemplate; } @Bean(name = "redisTemplate2") public RedisTemplate<String, Object> redisTemplate2(@Qualifier("redisConnectionFactory2") RedisConnectionFactory redisConnectionFactory) { RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>(); redisTemplate.setConnectionFactory(redisConnectionFactory); redisTemplate.setKeySerializer(new StringRedisSerializer()); redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class)); return redisTemplate; } @Bean(name = "redisConnectionFactory") public RedisConnectionFactory redisConnectionFactory(RedisProperties redisProperties) { JedisConnectionFactory jedisConnectionFactory = new JedisConnectionFactory(); jedisConnectionFactory.setHostName(redisProperties.getHost()); jedisConnectionFactory.setPort(redisProperties.getPort()); jedisConnectionFactory.setPassword(redisProperties.getPassword()); jedisConnectionFactory.setDatabase(redisProperties.getDatabase()); jedisConnectionFactory.setUsePool(true); jedisConnectionFactory.getPoolConfig().setMaxTotal(redisProperties.getJedis().getPool().getMaxActive()); jedisConnectionFactory.getPoolConfig().setMaxIdle(redisProperties.getJedis().getPool().getMaxIdle()); jedisConnectionFactory.getPoolConfig().setMinIdle(redisProperties.getJedis().getPool().getMinIdle()); jedisConnectionFactory.getPoolConfig().setMaxWaitMillis(redisProperties.getJedis().getPool().getMaxWait().toMillis()); return jedisConnectionFactory; } @Bean(name = "redisConnectionFactory2") public RedisConnectionFactory redisConnectionFactory2(@Qualifier("redisProperties2") RedisProperties redisProperties) { LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(); lettuceConnectionFactory.setHostName(redisProperties.getHost()); lettuceConnectionFactory.setPort(redisProperties.getPort()); lettuceConnectionFactory.setPassword(redisProperties.getPassword()); lettuceConnectionFactory.setDatabase(redisProperties.getDatabase()); lettuceConnectionFactory.setUsePooling(true); lettuceConnectionFactory.setPoolConfig(getLettucePoolConfig(redisProperties.getLettuce().getPool())); return lettuceConnectionFactory; } @Bean(name = "redisProperties") @ConfigurationProperties(prefix = "spring.redis") public RedisProperties redisProperties() { return new RedisProperties(); } @Bean(name = "redisProperties2") @ConfigurationProperties(prefix = "spring.redis2") public RedisProperties redisProperties2() { return new RedisProperties(); } private GenericObjectPoolConfig<?> getLettucePoolConfig(LettucePoolingClientConfiguration.Pool pool) { GenericObjectPoolConfig<?> config = new GenericObjectPoolConfig<>(); config.setMaxTotal(pool.getMaxActive()); config.setMaxIdle(pool.getMaxIdle()); config.setMinIdle(pool.getMinIdle()); config.setMaxWaitMillis(pool.getMaxWait().toMillis()); return config; } } ``` 要使用第二个Redis数据源,只需使用@Qualifier指定对应的RedisTemplate实例,例如: ```java @Autowired @Qualifier("redisTemplate2") private RedisTemplate<String, Object> redisTemplate2; ``` 这样就可以在Spring Boot中配置多个Redis数据源了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值