简介

redis 多数据源主要的运用场景是在需要使用多个redis服务器或者使用多个redis库,本文采用的是fastdep依赖集成框架,快速集成Redis多数据源并集成lettuce连接池,只需引入依赖后在yaml文件中配置多数据源连接信息即可。

源码地址

希望大家可以star支持一下,后续还会加入其它依赖的简易整合。

https://github.com/louislivi/fastdep

引入依赖

  • Maven
<dependency>
<groupId>com.louislivi.fastdep</groupId>
<artifactId>fastdep-redis</artifactId>
<version>1.0.1</version>
</dependency>
  • Gradle
compile group: 'com.louislivi.fastdep', name: 'fastdep-redis', version: '1.0.1'

配置文件

fastdep:
redis:
redis1: #连接名称
database: 0
host: 192.168.12.88
port: 6379
lettuce: #下面为连接池的补充设置
shutdown-timeout: 100 # 关闭超时时间
pool:
max-active: 18 # 连接池最大连接数(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
max-wait: 30 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
redis2: #连接名称
database: 1
host: 192.168.12.88
port: 6379
lettuce: #下面为连接池的补充设置
shutdown-timeout: 100 # 关闭超时时间
pool:
max-active: 18 # 连接池最大连接数(使用负值表示没有限制)
max-idle: 8 # 连接池中的最大空闲连接
max-wait: 30 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接

运用

@Autowired
private StringRedisTemplate redis1StringRedisTemplate;
// 注入时 redis1 代表配置文件中的连接名称 StringRedisTemplate 为固定注入redis对象类型,
// 会自动根据注入的变量名进行匹配 @Autowired
private StringRedisTemplate redis2StringRedisTemplate; @GetMapping("redis")
public void redis() {
System.out.println(redis1StringRedisTemplate.opsForValue().get("test"));
System.out.println(redis2StringRedisTemplate.opsForValue().get("test"));
}

扩展

有时候需要自定义redisTemplate序列化和增加一些额外的配置,这时候我们可以封装一个redis工具类来实现

package com.louislivi.fastdep.test.utils;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import org.springframework.stereotype.Component; /**
* RedisUtil
*
* @author : louislivi
*/
@Component
public class RedisUtil {
@Autowired
private StringRedisTemplate redis1StringRedisTemplate; @Autowired
private StringRedisTemplate redis2StringRedisTemplate; @Autowired
private RedisTemplate redis2RedisTemplate; @Autowired
private RedisTemplate redis1RedisTemplate; public RedisTemplate redisTemplate(String name) {
RedisTemplate redisTemplate;
switch (name) {
case "redis2":
redisTemplate = redis2RedisTemplate;
break;
default:
redisTemplate = redis1RedisTemplate;
break;
}
StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();
redisTemplate.setKeySerializer(stringRedisSerializer);
redisTemplate.setValueSerializer(stringRedisSerializer);
redisTemplate.setHashKeySerializer(stringRedisSerializer);
redisTemplate.setHashValueSerializer(stringRedisSerializer);
return redisTemplate;
} public StringRedisTemplate stringRedisTemplate(String name) {
StringRedisTemplate stringRedisTemplate;
switch (name) {
case "redis2":
stringRedisTemplate = redis2StringRedisTemplate;
break;
default:
stringRedisTemplate = redis1StringRedisTemplate;
break;
}
stringRedisTemplate.setEnableTransactionSupport(true);
return stringRedisTemplate;
}
}
@Autowired
private RedisUtil redisUtil; @GetMapping("redis")
public void redis() {
System.out.println(redisUtil.redisTemplate("redis1").opsForValue().get("test"));
System.out.println(redisUtil.stringRedisTemplate("redis2").opsForValue().get("test"));
}

原理

使用ImportBeanDefinitionRegistrar BeanDefinitionBuilder.genericBeanDefinition动态注入Bean其实很简单有兴趣可以去看看源码,这样的依赖集成是不是简单了很多呢?

希望大家能够支持开源,给个小星星,后续还会继续开发其他依赖的整合,甚至兼容其他框架使用。fastdepjava整合依赖更简单。在此也招募有志同道合的coder共同完善这个项目。

Spring boot如何快速的配置多个Redis数据源的更多相关文章

  1. 学记:为spring boot写一个自动配置

    spring boot遵循"约定优于配置"的原则,使用annotation对一些常规的配置项做默认配置,减少或不使用xml配置,让你的项目快速运行起来.spring boot的神奇 ...

  2. Spring Boot:快速入门教程

    什么是Spring Boot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人 ...

  3. Spring Boot 2.X(十六):应用监控之 Spring Boot Actuator 使用及配置

    Actuator 简介 Actuator 是 Spring Boot 提供的对应用系统的自省和监控功能.通过 Actuator,可以使用数据化的指标去度量应用的运行情况,比如查看服务器的磁盘.内存.C ...

  4. Spring Boot【快速入门】简单案例

    Spring Boot[快速入门]   Spring Boot 概述 Build Anything with Spring Boot:Spring Boot is the starting point ...

  5. Spring Boot中快速操作Mongodb

    Spring Boot中快速操作Mongodb 在Spring Boot中集成Mongodb非常简单,只需要加入Mongodb的Starter包即可,代码如下: <dependency> ...

  6. Spring Boot框架——快速入门

    Spring Boot是Spring 全家桶非常重要的一个模块,通过 Spring Boot 可以快速搭建一个基于 Spring 的 Java 应用程序,Spring Boot 对常用的第三方库提供了 ...

  7. Spring Boot 如何快速集成 Redis 哨兵?

    上一篇:Spring Boot 如何快速集成 Redis? 前面的分享栈长介绍了如何使用 Spring Boot 快速集成 Redis,上一篇是单机版,也有粉丝留言说有没有 Redis Sentine ...

  8. 【面试普通人VS高手系列】Spring Boot的约定优于配置,你的理解是什么?

    对于Spring Boot约定优于配置这个问题,看看普通人和高手是如何回答的? 普通人的回答: 嗯, 在Spring Boot里面,通过约定优于配置这个思想,可以让我们少写很多的配置, 然后就只需要关 ...

  9. Spring Boot 探索系列 - 自动化配置篇

    26. Logging Prev  Part IV. Spring Boot features  Next 26. Logging Spring Boot uses Commons Logging f ...

随机推荐

  1. thinkpad p1 gen2 扬声器音量异常问题解决过程

    在弹出 "用户帐户控制" 对话框时的声音明显不对,测试后发现规律:音量在30以内,1分钟内扬声器无声音发出,运行ccleaner弹出 "用户帐户控制" 对话框, ...

  2. P3043 [USACO12JAN]牛联盟Bovine Alliance——并查集

    题目描述 给出n个点m条边的图,现把点和边分组,每条边只能和相邻两点之一分在一组,点可以单独一组,问分组方案数. (友情提示:每个点只能分到一条边,中文翻译有问题,英文原版有这样一句:The cows ...

  3. Python基本数据结构之字典嵌套(例子)

    北京城市地区之间的嵌套 # coding=gbk #Created on 2019/5/20 #@author: XiaoHu menu = { '北京': { '朝阳': { '国贸': { 'CI ...

  4. Git详解使用教程

    一. 什么是Git Git(读音为/gɪt/).是一个开源的 分布式版本控制系统,可以有效.高速地处理从很小到非常大的项目版本管理. Git 是 Linus Torvalds 为了帮助管理 Linux ...

  5. jquery写$ document.getElementById效果

    jquery写$ document.getElementById效果<pre>document.getElementById('video-canvas')和$('#video-canva ...

  6. IDEA Debug 无法进入断点的解决方法

    文章来源: https://studyidea.cn/idea_breakpoint_not_use 前言 某个多模块项目中使用多个版本的 Spring,如 Spring 4,Spring 5,在使用 ...

  7. 本周授课内容:http,https,Tomcat,servlet

    https:https是基于安全套接字的http协议,也可以理解为是http+ssl/tls(数字证书)的组合 http和https的区别: HTTP 的 URL 以 http:// 开头,而 HTT ...

  8. SSE图像算法优化系列三十:GIMP中的Noise Reduction算法原理及快速实现。

    GIMP源代码链接:https://gitlab.gnome.org/GNOME/gimp/-/archive/master/gimp-master.zip GEGL相关代码链接:https://gi ...

  9. linux系统LAMP环境部署

    一.安装虚拟机 二.安装CentOS7 注意:以下安装,用的root权限. 三.安装Apache 1.安装 yum -y install httpd 2.开启apache服务 systemctl st ...

  10. SpringBoot系列教程JPA之指定id保存

    原文链接: 191119-SpringBoot系列教程JPA之指定id保存 前几天有位小伙伴问了一个很有意思的问题,使用 JPA 保存数据时,即便我指定了主键 id,但是新插入的数据主键却是 mysq ...