springboot中默认的redis配置是只能对单个redis库进行操作的。

那么我们需要多个库操作的时候这个时候就可以采用redis多数据源。

本代码参考RedisAutoConfiguration源码进行整改成的多数据源配置

注意:数据源2就是数据源1copy了一份代码,把所有的gisredis改成appredis,并去除数据源2的@Primary即可。如果还需要增加多个数据源,以此类推

配置redis数据源1:

 package com.aaaa.config.redis;

 import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel;
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.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import redis.clients.jedis.JedisPoolConfig; /**
*
* @desc Redis配置
* @author josnow
* @date 2018年1月17日 上午10:51:36
* @version 1.0.0
*/
@Configuration
public class RedisConfiggisredis { @Bean(name = "gisredisRedisProperties")
@ConfigurationProperties(prefix = "spring.redis.gisredis")
@Primary
public RedisProperties gisredisRedisProperties() {
RedisProperties redisProperties = new RedisProperties();
return redisProperties;
} // //@Bean("gisredisRedisTemplate")
// public RedisTemplate<Object, Object> redisTemplate(@Qualifier("gisredisRedisConnectionFactory")RedisConnectionFactory
// redisConnectionFactory)
// throws UnknownHostException {
// RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
// template.setConnectionFactory(redisConnectionFactory);
// return template;
// } @Bean("gisredisStringRedisTemplate")
@Primary
public StringRedisTemplate stringRedisTemplate(
@Qualifier("gisredisRedisConnectionFactory")RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
} @Bean("gisredisRedisConnectionFactory")
@Primary
public RedisConnectionFactory redisConnectionFactory(
@Qualifier("gisredisRedisProperties") RedisProperties redisProperties) throws UnknownHostException { return setRedisConnectionFactory(redisProperties, null, null);
} private JedisConnectionFactory setRedisConnectionFactory(RedisProperties redisProperties,
RedisSentinelConfiguration sentinelConfiguration, RedisClusterConfiguration clusterConfiguration)
throws UnknownHostException {
return applyProperties(
createJedisConnectionFactory(redisProperties, sentinelConfiguration, clusterConfiguration),
redisProperties);
} private final JedisConnectionFactory applyProperties(JedisConnectionFactory factory,
RedisProperties redisProperties) {
factory.setHostName(redisProperties.getHost());
factory.setPort(redisProperties.getPort());
if (redisProperties.getPassword() != null) {
factory.setPassword(redisProperties.getPassword());
}
factory.setDatabase(redisProperties.getDatabase());
if (redisProperties.getTimeout() > 0) {
factory.setTimeout(redisProperties.getTimeout());
}
return factory;
} private final RedisSentinelConfiguration getSentinelConfig(RedisProperties redisProperties,
RedisSentinelConfiguration sentinelConfiguration) {
if (sentinelConfiguration != null) {
return sentinelConfiguration;
}
Sentinel sentinelProperties = redisProperties.getSentinel();
if (sentinelProperties != null) {
RedisSentinelConfiguration config = new RedisSentinelConfiguration();
config.master(sentinelProperties.getMaster());
config.setSentinels(createSentinels(sentinelProperties));
return config;
}
return null;
} /**
* Create a {@link RedisClusterConfiguration} if necessary.
*
* @return {@literal null} if no cluster settings are set.
*/
private final RedisClusterConfiguration getClusterConfiguration(RedisProperties redisProperties,
RedisClusterConfiguration clusterConfiguration) {
if (clusterConfiguration != null) {
return clusterConfiguration;
}
if (redisProperties.getCluster() == null) {
return null;
}
Cluster clusterProperties = redisProperties.getCluster();
RedisClusterConfiguration config = new RedisClusterConfiguration(clusterProperties.getNodes()); if (clusterProperties.getMaxRedirects() != null) {
config.setMaxRedirects(clusterProperties.getMaxRedirects());
}
return config;
} private List<RedisNode> createSentinels(Sentinel sentinel) {
List<RedisNode> nodes = new ArrayList<RedisNode>();
for (String node : StringUtils.commaDelimitedListToStringArray(sentinel.getNodes())) {
try {
String[] parts = StringUtils.split(node, ":");
Assert.state(parts.length == 2, "Must be defined as 'host:port'");
nodes.add(new RedisNode(parts[0], Integer.valueOf(parts[1])));
} catch (RuntimeException ex) {
throw new IllegalStateException("Invalid redis sentinel " + "property '" + node + "'", ex);
}
}
return nodes;
} private JedisConnectionFactory createJedisConnectionFactory(RedisProperties redisProperties,
RedisSentinelConfiguration sentinelConfiguration, RedisClusterConfiguration clusterConfiguration) {
JedisPoolConfig poolConfig = redisProperties.getPool() != null ? jedisPoolConfig(redisProperties)
: new JedisPoolConfig(); if (getSentinelConfig(redisProperties, sentinelConfiguration) != null) {
return new JedisConnectionFactory(getSentinelConfig(redisProperties, sentinelConfiguration), poolConfig);
}
if (getClusterConfiguration(redisProperties, clusterConfiguration) != null) {
return new JedisConnectionFactory(getClusterConfiguration(redisProperties, clusterConfiguration),
poolConfig);
}
return new JedisConnectionFactory(poolConfig);
} private JedisPoolConfig jedisPoolConfig(RedisProperties redisProperties) {
JedisPoolConfig config = new JedisPoolConfig();
RedisProperties.Pool props = redisProperties.getPool();
config.setMaxTotal(props.getMaxActive());
config.setMaxIdle(props.getMaxIdle());
config.setMinIdle(props.getMinIdle());
config.setMaxWaitMillis(props.getMaxWait());
return config;
} }

配置redis数据源2:

 package com.aaaa.config.redis;

 import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List; import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Cluster;
import org.springframework.boot.autoconfigure.data.redis.RedisProperties.Sentinel;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisClusterConfiguration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils; import redis.clients.jedis.JedisPoolConfig; /**
*
* @desc Redis配置
* @author josnow
* @date 2018年1月17日 上午10:51:36
* @version 1.0.0
*/
@Configuration
public class RedisConfigappredis { @Bean(name = "appredisRedisProperties")
@ConfigurationProperties(prefix = "spring.redis.appredis")
public RedisProperties appredisRedisProperties() {
RedisProperties redisProperties = new RedisProperties();
return redisProperties;
} // //@Bean("appredisRedisTemplate")
// public RedisTemplate<Object, Object> redisTemplate(@Qualifier("appredisRedisConnectionFactory")RedisConnectionFactory
// redisConnectionFactory)
// throws UnknownHostException {
// RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
// template.setConnectionFactory(redisConnectionFactory);
// return template;
// } @Bean("appredisStringRedisTemplate")
public StringRedisTemplate stringRedisTemplate(
@Qualifier("appredisRedisConnectionFactory") RedisConnectionFactory redisConnectionFactory)
throws UnknownHostException {
StringRedisTemplate template = new StringRedisTemplate();
template.setConnectionFactory(redisConnectionFactory);
return template;
} @Bean("appredisRedisConnectionFactory")
public RedisConnectionFactory redisConnectionFactory(
@Qualifier("appredisRedisProperties") RedisProperties redisProperties) throws UnknownHostException { return setRedisConnectionFactory(redisProperties, null, null);
} private JedisConnectionFactory setRedisConnectionFactory(RedisProperties redisProperties,
RedisSentinelConfiguration sentinelConfiguration, RedisClusterConfiguration clusterConfiguration)
throws UnknownHostException {
return applyProperties(
createJedisConnectionFactory(redisProperties, sentinelConfiguration, clusterConfiguration),
redisProperties);
} private final JedisConnectionFactory applyProperties(JedisConnectionFactory factory,
RedisProperties redisProperties) {
factory.setHostName(redisProperties.getHost());
factory.setPort(redisProperties.getPort());
if (redisProperties.getPassword() != null) {
factory.setPassword(redisProperties.getPassword());
}
factory.setDatabase(redisProperties.getDatabase());
if (redisProperties.getTimeout() > 0) {
factory.setTimeout(redisProperties.getTimeout());
}
return factory;
} private final RedisSentinelConfiguration getSentinelConfig(RedisProperties redisProperties,
RedisSentinelConfiguration sentinelConfiguration) {
if (sentinelConfiguration != null) {
return sentinelConfiguration;
}
Sentinel sentinelProperties = redisProperties.getSentinel();
if (sentinelProperties != null) {
RedisSentinelConfiguration config = new RedisSentinelConfiguration();
config.master(sentinelProperties.getMaster());
config.setSentinels(createSentinels(sentinelProperties));
return config;
}
return null;
} /**
* Create a {@link RedisClusterConfiguration} if necessary.
*
* @return {@literal null} if no cluster settings are set.
*/
private final RedisClusterConfiguration getClusterConfiguration(RedisProperties redisProperties,
RedisClusterConfiguration clusterConfiguration) {
if (clusterConfiguration != null) {
return clusterConfiguration;
}
if (redisProperties.getCluster() == null) {
return null;
}
Cluster clusterProperties = redisProperties.getCluster();
RedisClusterConfiguration config = new RedisClusterConfiguration(clusterProperties.getNodes()); if (clusterProperties.getMaxRedirects() != null) {
config.setMaxRedirects(clusterProperties.getMaxRedirects());
}
return config;
} private List<RedisNode> createSentinels(Sentinel sentinel) {
List<RedisNode> nodes = new ArrayList<RedisNode>();
for (String node : StringUtils.commaDelimitedListToStringArray(sentinel.getNodes())) {
try {
String[] parts = StringUtils.split(node, ":");
Assert.state(parts.length == 2, "Must be defined as 'host:port'");
nodes.add(new RedisNode(parts[0], Integer.valueOf(parts[1])));
} catch (RuntimeException ex) {
throw new IllegalStateException("Invalid redis sentinel " + "property '" + node + "'", ex);
}
}
return nodes;
} private JedisConnectionFactory createJedisConnectionFactory(RedisProperties redisProperties,
RedisSentinelConfiguration sentinelConfiguration, RedisClusterConfiguration clusterConfiguration) {
JedisPoolConfig poolConfig = redisProperties.getPool() != null ? jedisPoolConfig(redisProperties)
: new JedisPoolConfig(); if (getSentinelConfig(redisProperties, sentinelConfiguration) != null) {
return new JedisConnectionFactory(getSentinelConfig(redisProperties, sentinelConfiguration), poolConfig);
}
if (getClusterConfiguration(redisProperties, clusterConfiguration) != null) {
return new JedisConnectionFactory(getClusterConfiguration(redisProperties, clusterConfiguration),
poolConfig);
}
return new JedisConnectionFactory(poolConfig);
} private JedisPoolConfig jedisPoolConfig(RedisProperties redisProperties) {
JedisPoolConfig config = new JedisPoolConfig();
RedisProperties.Pool props = redisProperties.getPool();
config.setMaxTotal(props.getMaxActive());
config.setMaxIdle(props.getMaxIdle());
config.setMinIdle(props.getMinIdle());
config.setMaxWaitMillis(props.getMaxWait());
return config;
} }

redis数据源1和数据源2的配置yml

  
   spring:
   redis:
gisredis:
host: 10.142.142.142
port: 6379
database: 6
testOnBorrow: true
pool:
max-active: 10000
max-idle: 1000
max-wait: 60000
min-idle: 0
appredis:
host: 10.142.141.84
port: 6379
database: 5
testOnBorrow: true
pool:
max-active: 10000
max-idle: 1000
max-wait: 60000
min-idle: 0

配置就这么多,要注意的是多个redis数据源必须指定一个默认的数据源。使用@Primary来指定,并且只能指定一个默认redis数据源。

注意:数据源2就是数据源1copy了一份代码,把所有的gisredis改成appredis,并去除数据源2的@Primary即可。如果还需要增加多个数据源,以此类推

最后在使用的时候

 @Autowired
@Qualifier("appredisStringRedisTemplate")
private StringRedisTemplate appredisStringRedisTemplate;

即可得到指定的redis源,使用起来也是很方便

springboot redis多数据源的更多相关文章

  1. springboot redis多数据源设置

    遇到这样一个需求:运营人员在发布内容的时候可以选择性的发布到测试库.开发库和线上库. 项目使用的是spring boot集成redis,实现如下: 1. 引入依赖 <dependency> ...

  2. Spring Boot 2.x Redis多数据源配置(jedis,lettuce)

    Spring Boot 2.x Redis多数据源配置(jedis,lettuce) 96 不敢预言的预言家 0.1 2018.11.13 14:22* 字数 65 阅读 727评论 0喜欢 2 多数 ...

  3. springboot2.1+redis多数据源的配置

    springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich.    由于是一系列文章,所以后面的文章可能会使用到前面文 ...

  4. 补习系列(14)-springboot redis 整合-数据读写

    目录 一.简介 二.SpringBoot Redis 读写 A. 引入 spring-data-redis B. 序列化 C. 读写样例 三.方法级缓存 四.连接池 小结 一.简介 在 补习系列(A3 ...

  5. SpringBoot+Redis整合

    SpringBoot+Redis整合 1.在pom.xml添加Redis依赖 <!--整合Redis--> <dependency> <groupId>org.sp ...

  6. springboot添加多数据源连接池并配置Mybatis

    springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018  ...

  7. springboot之多数据源配置JdbcTemplate

    springboot多数据源配置,代码如下 DataSourceConfig package com.rookie.bigdata.config; import org.springframework ...

  8. springboot配置Druid数据源

    springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...

  9. springboot +redis配置

    springboot +redis配置 pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...

随机推荐

  1. SpringBoot集成jsp

    一.springBoot集成jsp: 1.修改pom文件 <!--集成jsp所需jar包--> <!--jsp页面使用jstl标签--> <dependency> ...

  2. 使用Cli构建Go的命令行应用

    转载出处:http://www.opscoder.info/cli.html   在Go里面应用中flag这一标准库,提供了很多我们在写命令行时需要的interface,然而如果你需要更强大更好的结构 ...

  3. 网易面经(Java开发岗)

    网易面经(Java岗) 网易两面面经整理 岗位:我投递的是杭研所的Java开发岗位.行程:半天的时间南京=杭州之间穿行,单程2个小时,从杭州东站=网易大厦,单程1个小时(如果能买到城站高铁动车票可以从 ...

  4. Linux 下常用的Shell 命令

    英文原文链接:https://www.lopezferrando.com/30-interesting-shell-commands/ 1. 监控命令(每2秒运行一次) watch "ls ...

  5. the import java.util.* cannot be resolve,怎么解决

    我碰到这个问题是因为重装系统后,原先的JDK6换成了JDK7, Eclipse中的旧项目中jsp文件的此类import出现错误提示.在以下页面找到解决方案,专贴出来: http://www.myexc ...

  6. Nginx日志自动按日期存储

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,因它的稳定性.丰富的功能集.示例配置文件和 ...

  7. 搭建centos7的开发环境2-单机版Hadoop2.7.3配置

    最近公司准备升级spark环境,主要原因是生产环境的spark和hadoop版本都比较低,但是具体升级到何种版本还不确定,需要做进一步的测试分析.这个任务对于大数据开发环境配置有要求,这里记录一下配置 ...

  8. vue UI库iview源码解析(2)

    上篇问题 在上篇<iview源码解析(1)>中的index.js 入口文件的源码中有一段代码有点疑惑: /** * 在浏览器环境下默认加载组件 */ // auto install if ...

  9. CSS(选择器)

    CSS(选择器) 作用:用于匹配 HTML 元素 选择器分类: 1.元素选择器  a{} 2.伪元素选择器  ::before{}  (真实存在的元素) 3.类选择器   .link{} 4.属性选择 ...

  10. 从 源码 谈谈 redux compose

    compose,英文意思 组成,构成. 它的作用也是通过一系列的骚操作,实现任意的.多种的.不同的功能模块的组合,用来加强组件. 看看源码 https://github.com/reactjs/red ...