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. sublime使用技巧之集成VI

    熟悉开发工具,减少多余的操作流程有助于提高开发效率,而Sublime Text 2是sublime产品的经典版本,因此本文基于Sublime Text 2讲解sublime的使用技巧. VI的主要作用 ...

  2. QQ connect client request's parameters are invalid, invalid openid 问题的解决

    很多人的这个问题是POST的时候发生,我的也恰好在POST的时候发生.后来我发现可能是因为QQ的这个后端是采用类PHP的语言开发,在动态语言的获取参数时POST参数和GET参数是可以分开读取的,也就是 ...

  3. 2013-8:SDCE大会笔记

    百度移动云三大开发框架:Clouda,SiteApp,AppBuilder MBaaS解决高性能Server很难的问题 百度开放云的区域运营服务于创业者 Pinterest架构变迁: 互联网就是把线下 ...

  4. mysql 关于表与字段的增删改查操作

    1.mysql 命令登陆 形式: mysql -u用户名 -p密码 mysql -uroot -proot 2.mysql 显示数据库 形式: show databases; 3.mysql 进入某一 ...

  5. 用Maven实现一个protobuf的Java例子

    注:试验环境在Mac Idea环境下 1. 介绍Protocol Buffers Protocal Buffers(简称protobuf)是谷歌的一项技术,用于结构化的数据序列化.反序列化,常用于RP ...

  6. ArcCore重构-Makefile模块化

    基于官方arc-stable-9c57d86f66be,AUTOSAR版本3.1.5   基本问题 2. 编译系统中代码文件是否编译及目标文件集中定义在boards/board_common.mk,而 ...

  7. (汇总)os模块以及shutil模块对文件的操作

    ''' # os 模块 os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux ...

  8. SpringMVC, Spring和Mybatis整合案例一

    一  准备工作 包括:spring(包括springmvc).mybatis.mybatis-spring整合包.数据库驱动.第三方连接池. 二  整合思路 Dao层: 1.SqlMapConfig. ...

  9. Struts2中的值栈

    一 什么是值栈 值栈: struts2中提供的一种类似于域对象的工具, 用于struts2中的存值和取值. 每次访问Action的时候, 都会创建一个action对象, 而每个action对象中都存在 ...

  10. ansj构造最短路径

    一.前言 上节介绍了ansj的原子切分和全切分.切分完成之后,就要构建最短路径,得到分词结果. 以"商品和服务"为例,调用ansj的标准分词: String str = " ...