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> ...
随机推荐
- Java实现发送邮件(可配置)忘记密码,发送邮件
学过Java基础的应该知道Java里有邮件这一块,不熟悉的话可以简单复习一下 本文章把发送邮件做为可配置可配置文件,这样方便以后维护 一.Maven依赖包 (发送邮件所依赖的jar包) <!-- ...
- 通知:QQ互联网回调地址校验加强
今天公司网站第三方qq快捷登录突然登录不了了,之前明明是ok的. 可以看到有一个错误信息提示 在qq互联的官网看到了这个通知 然后解决办法是: 1.打开http://open.qq.com/tools ...
- html5 下拉刷新(pc+移动网页源码)
本文demo下载地址:http://www.wisdomdd.cn/Wisdom/resource/articleDetail.htm?resourceId=1071 本文实现在html5网页中使用下 ...
- vue.js中的全局组件和局部组件
组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能. 组件的使用有三 ...
- angular2项目如何使用sass
angular/cli支持使用sass 新建工程: 如果是新建一个angular工程采用sass: ng new My_New_Project --style=sass 这样所有样式的地方都将采用sa ...
- 填坑!!!virtualenv 中 nginx + uwsgi 部署 django
一.为什么会有这篇文章 第一次接触 uwsgi 和 nginx ,这个环境搭建,踩了太多坑,现在记录下来,让后来者少走弯路. 本来在 Ubuntu14.04 上 搭建好了环境,然后到 centos7. ...
- Python_eval()
''' eval()用来把任意字符串转化为Python表达式并进行求值 ''' print(eval('3+4')) #计算表达式的值 a=3 b=4 print(eval('a+b')) #这时候要 ...
- PAT1081:Rational Sum
1081. Rational Sum (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Given N ...
- zabbix监控mysql性能
使用zabbix监控mysql的三种方式 1.只是安装agent 2.启用模板监控 3.启用自定义脚本的模板监控 zabbix中默认有mysql的监控模板.默认已经在zabbix2.2及以上的版本中. ...
- Spring Cloud分布式微服务系统中利用redssion实现分布式锁
在非分布式系统中要实现锁的机制很简单,利用java.util.concurrent.locks包下的Lock和关键字synchronized都可以实现.但是在分布式系统中,如何实现各个单独的微服务需要 ...