多数据源最终表现其实就是 redis connection factory 不同

springboot 默认的redis配置维护了一套 connection factory

自己维护一套 connection factory 即可实现

application.yml

spring:

redis:

# 默认配置

database: 0

host: 10.180.29.19

port: 6379

password: admin

timeout: 2000

lettuce:

pool:

max-active: 20

max-wait: -1

max-idle: 10

min-idle: 0

# 自定义配置

local:

host: 127.0.0.1

port: 6379

password: admin

RedisConfig.java

package site.yuyanjia.template.common.config;

import com.fasterxml.jackson.annotation.JsonAutoDetect;

import com.fasterxml.jackson.annotation.PropertyAccessor;

import com.fasterxml.jackson.databind.ObjectMapper;

import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.cache.annotation.CachingConfigurerSupport;

import org.springframework.cache.annotation.EnableCaching;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.data.redis.connection.RedisConnectionFactory;

import org.springframework.data.redis.connection.RedisPassword;

import org.springframework.data.redis.connection.RedisStandaloneConfiguration;

import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;

import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;

import org.springframework.data.redis.core.RedisTemplate;

import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;

import org.springframework.data.redis.serializer.StringRedisSerializer;

import org.springframework.util.ObjectUtils;

import java.time.Duration;

/**

* RedisConfig

*

* @author seer

* @date 2018/5/30 09:32

*/

@Configuration

@EnableCaching

public class RedisConfig extends CachingConfigurerSupport {

/**

* 本地数据源 redis template

*

* @param database

* @param timeout

* @param maxActive

* @param maxWait

* @param maxIdle

* @param minIdle

* @param hostName

* @param port

* @param password

* @return

*/

@Bean

public RedisTemplate redisTemplateLocal(

@Value("${spring.redis.database}") int database,

@Value("${spring.redis.timeout}") long timeout,

@Value("${spring.redis.lettuce.pool.max-active}") int maxActive,

@Value("${spring.redis.lettuce.pool.max-wait}") int maxWait,

@Value("${spring.redis.lettuce.pool.max-idle}") int maxIdle,

@Value("${spring.redis.lettuce.pool.min-idle}") int minIdle,

@Value("${spring.redis.local.host}") String hostName,

@Value("${spring.redis.local.port}") int port,

@Value("${spring.redis.local.password}") String password) {

/* ========= 基本配置 ========= */

RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();

configuration.setHostName(hostName);

configuration.setPort(port);

configuration.setDatabase(database);

if (!ObjectUtils.isEmpty(password)) {

RedisPassword redisPassword = RedisPassword.of(password);

configuration.setPassword(redisPassword);

}

/* ========= 连接池通用配置 ========= */

GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();

genericObjectPoolConfig.setMaxTotal(maxActive);

genericObjectPoolConfig.setMinIdle(minIdle);

genericObjectPoolConfig.setMaxIdle(maxIdle);

genericObjectPoolConfig.setMaxWaitMillis(maxWait);

/* ========= jedis pool ========= */

/*

JedisClientConfiguration.DefaultJedisClientConfigurationBuilder builder = (JedisClientConfiguration.DefaultJedisClientConfigurationBuilder) JedisClientConfiguration

.builder();

builder.connectTimeout(Duration.ofSeconds(timeout));

builder.usePooling();

builder.poolConfig(genericObjectPoolConfig);

JedisConnectionFactory connectionFactory = new JedisConnectionFactory(configuration, builder.build());

// 连接池初始化

connectionFactory.afterPropertiesSet();

*/

/* ========= lettuce pool ========= */

LettucePoolingClientConfiguration.LettucePoolingClientConfigurationBuilder builder = LettucePoolingClientConfiguration.builder();

builder.poolConfig(genericObjectPoolConfig);

builder.commandTimeout(Duration.ofSeconds(timeout));

LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(configuration, builder.build());

connectionFactory.afterPropertiesSet();

/* ========= 创建 template ========= */

return createRedisTemplate(connectionFactory);

}

/**

* 默认配置(10.180.29.19) redis template

*

* @param redisConnectionFactory

* @return

*/

@Bean

public RedisTemplate redisTemplate(RedisConnectionFactory redisConnectionFactory) {

return createRedisTemplate(redisConnectionFactory);

}

/**

* json 实现 redisTemplate

*

* 该方法不能加 @Bean 否则不管如何调用,connectionFactory都会是默认配置

*

* @param redisConnectionFactory

* @return

*/

public RedisTemplate createRedisTemplate(RedisConnectionFactory redisConnectionFactory) {

RedisTemplate redisTemplate = new RedisTemplate<>();

redisTemplate.setConnectionFactory(redisConnectionFactory);

Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);

ObjectMapper objectMapper = new ObjectMapper();

objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);

objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

jackson2JsonRedisSerializer.setObjectMapper(objectMapper);

redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);

redisTemplate.setKeySerializer(new StringRedisSerializer());

redisTemplate.afterPropertiesSet();

return redisTemplate;

}

}

使用

/**

* 本地redis

*/

@Autowired

private RedisTemplate redisTemplateLocal;

/**

* 默认redis

*/

@Autowired

private RedisTemplate redisTemplate;

不甚明白的可以了解下 Autowired 的装配机制

java lettuce配置多数据源_Spring Boot 2.x Redis多数据源配置(jedis,lettuce)相关推荐

  1. druid 多数据源_Spring Boot + Mybatis 中 配置Druid多数据源并实现自由切换

    概述 前面我们已经介绍过了对MyBatis.Druid的整合,接下来我们在之前的基础上做扩展,实现对Druid多数据源的配置以及动态切换数据源. 问题:多数据源使用场景有哪些呢? 回答:在业务发展中, ...

  2. node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置

    上一篇我们介绍了在使用JdbcTemplate来做数据访问时候的多数据源配置实现.接下来我们继续学习如何在使用Spring Data JPA的时候,完成多数据源的配置和使用. 添加多数据源的配置 先在 ...

  3. java 集成ibm mq 教程_Spring Boot JMS与IBM WebSphere MQ集成配置

    Spring Boot JMS与IBM WebSphere MQ集成配置 [TOC] 前言 Spring Boot作为简化Spring开发的框架,已经为我们集成了ActiveMQ和RabbitMQ.只 ...

  4. hikari如何切换数据源_spring boot+mybatis 多数据源切换(实例讲解)

    由于公司业务划分了多个数据库,开发一个项目会同事调用多个库,经过学习我们采用了注解+aop的方式实现的 1.首先定义一个注解类 @Retention(RetentionPolicy.RUNTIME) ...

  5. java中admin什么意思_Spring Boot Admin 的使用详解

    一.前言 Spring Boot Admin 用于监控基于 Spring Boot 的应用.官方文档在这里(v1.3.4):<Spring Boot Admin Reference Guide& ...

  6. Java注解配置rest服务_Spring Boot 注解—常用注解

    注:该部分内容包含一些常用注解,如果没有学习过java注解的同学可以先看一下上一小节的内容Spring Boot 注解-基本知识 ,不看也没关系,下面就开始本节内容. @Configuration注解 ...

  7. java 如何去掉http debug日志_Spring Boot手把手教学(3):从零配置logback日志

    前言 使用logback我们可以自定义控制台日志输出,可以实现对不同日志不同级别打印到不同的文件中,可以对日志进行归档保存,并定时删除: 对于一个应用来讲,一个好的日志系统,对于对问题的追溯有很大的帮 ...

  8. java restful接口开发实例_Spring Boot 中 10 行代码构建 RESTful 风格应用!

    点击上方"Java后端技术",选择"置顶或者星标" 你关注的就是我关心的! 作者:江南一点雨 微信公众号:牧码小子(ID:a_javaboy) 推荐阅读:10个 ...

  9. java主流微服务框架_Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解,...

    Spring Boot作为当下最流行的微服务开发框架,一名合格的Java开发者一定有所了解, Spring Boot相对于传统的SSM框架来说:springboot使用了特定的配置方式,开发人员不需要 ...

最新文章

  1. 正则表达式中的*,+,?以及\w和\W的区别等常见问题的总结
  2. IMI装系统装到一半出错?
  3. mysql 按条件导出数据_mysql命令行按任意查询条件导出指定数据
  4. linux系统 wm9713声卡配置 记录
  5. linux字符设备文件的打开操作,Linux字符设备驱动模型之字符设备初始化
  6. Python 列表推导式 - Python零基础入门教程
  7. java 内存情况_java查看jvm内存使用情况
  8. android组合控件 重叠,Android 组合控件实现布局的复用的方法
  9. Unity StartCoroutine 和 yield return 深入研究
  10. 请求url处理java_【脚本写作】Java: HttpURLConnection请求处理
  11. 一、app更新提示后台接口开发-(2)数据库表设计
  12. vue3使用vite创建项目【2分钟】
  13. 能力提升综合题单 Part 8.9.1 最大流
  14. DEM数据如何生成高程点
  15. 2021广州城市信息模型(CIM)白皮书发布
  16. 互联网创业公司技术总监工作职责描述
  17. 【opencv】图片拼接
  18. QGraphicsView使用详解
  19. 没有产权证的车库能不能随时拆掉
  20. Cubase中文版教程:如何通过音频剪辑软件创建工程

热门文章

  1. vue-router之嵌套路由
  2. 数论基础之组合数计数问题
  3. 9.11两点间距离(1636050091)
  4. 将navigationbar的translucent属性设为No后,子控制器视图整体下移问题
  5. [工具-004]如何从apk中提取AndroidManifest.xml并提取相应信息
  6. air写文件 SecurityError: fileWriteResource 时报错的解决方法
  7. Android设备上使用WiFinspect抓取网络通讯包
  8. 大数据_Spark框架_快速上手_word count 案例分析---Spark工作笔记0005
  9. 软考信息系统项目管理师_项目进度管理2---软考高级之信息系统项目管理师014
  10. C++_类和对象_C++多态_多态的原理剖析---C++语言工作笔记070