springboot redis多数据源
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多数据源的更多相关文章
- springboot redis多数据源设置
遇到这样一个需求:运营人员在发布内容的时候可以选择性的发布到测试库.开发库和线上库. 项目使用的是spring boot集成redis,实现如下: 1. 引入依赖 <dependency> ...
- 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 多数 ...
- springboot2.1+redis多数据源的配置
springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich. 由于是一系列文章,所以后面的文章可能会使用到前面文 ...
- 补习系列(14)-springboot redis 整合-数据读写
目录 一.简介 二.SpringBoot Redis 读写 A. 引入 spring-data-redis B. 序列化 C. 读写样例 三.方法级缓存 四.连接池 小结 一.简介 在 补习系列(A3 ...
- SpringBoot+Redis整合
SpringBoot+Redis整合 1.在pom.xml添加Redis依赖 <!--整合Redis--> <dependency> <groupId>org.sp ...
- springboot添加多数据源连接池并配置Mybatis
springboot添加多数据源连接池并配置Mybatis 转载请注明出处:https://www.cnblogs.com/funnyzpc/p/9190226.html May 12, 2018 ...
- springboot之多数据源配置JdbcTemplate
springboot多数据源配置,代码如下 DataSourceConfig package com.rookie.bigdata.config; import org.springframework ...
- springboot配置Druid数据源
springboot配置druid数据源 Author:SimpleWu springboot整合篇 前言 对于数据访问层,无论是Sql还是NoSql,SpringBoot默认采用整合SpringDa ...
- springboot +redis配置
springboot +redis配置 pom依赖 <dependency> <groupId>org.springframework.boot</groupId> ...
随机推荐
- JavaScript异步编程:Generator与Async
从Promise开始,JavaScript就在引入新功能,来帮助更简单的方法来处理异步编程,帮助我们远离回调地狱. Promise是下边要讲的Generator/yield与async/await的基 ...
- SQL Server 远程更新目标表数据
分享一个远程更新目标库数据的存储过程,适用于更新列名一致,主键为Int类型,可远程链接的数据库. ** 温馨提示:如需转载本文,请注明内容出处.** 本文连接:http://www.cnblogs.c ...
- python中的类
以下内容是python tutorial的读书笔记: 一.命名空间的分层 二.local赋值语句,nonlocal和global的区别 local赋值语句,它是无法实现对于最里层的作用域的重新绑定的 ...
- SpringBoot 创建可执行Jar
创建可执行JAR 我们也可以通过插件创建一个在生产环境中运行的可执行jar文件来完成我们的示例. 首先引入依赖: <build> <plugins> <plugin> ...
- java解析xml字符串方法
一,用DOM4J 针对无重复标签的xml字符串格式,如下: 针对此种情况可用DOM4J解析法,引入 dom4j的相关jar包代码如下: Document document=DocumentHelpe ...
- Http协议、Tomcat、servlet
HTTP协议 Http,超文本传输协议是互联网上最广泛的一种网络协议,所有的www文件都必须遵守这个标准. Http协议由http请求和http响应组成 http请求: 1.请求行 请求方式 POST ...
- @Scheduled cron表达式
一.Cron详解: Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: 1.Seconds Minutes Hours Dayof ...
- Maven学习(三)-- 使用Maven构建项目
摘自:http://www.cnblogs.com/xdp-gacl/p/4240930.html maven作为一个高度自动化构建工具,本身提供了构建项目的功能,下面就来体验一下使用maven构建项 ...
- ubuntu18.04安装搜狗拼音
1.下载好搜狗安装包http://pinyin.sogou.com/linux/ ,注意位数! 2.打开终端安装依赖 sudo apt install libfcitx-qt0 3.提取下载好的 ...
- PAT1009:Product of Polynomials
1009. Product of Polynomials (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yu ...