springboot系列学习笔记全部文章请移步值博主专栏**: spring boot 2.X/spring cloud Greenwich。
    由于是一系列文章,所以后面的文章可能会使用到前面文章的项目。springboot系列代码全部上传至GitHub:https://github.com/liubenlong/springboot2_demo
    本系列环境:Java11;springboot 2.1.1.RELEASE;springcloud Greenwich.RELEASE;MySQL 8.0.5;
文章目录
    多数据源配置

有时候会遇到在一个项目中访问多个redis数据源的情况,这里就模拟一下springboot2.1+redis多数据源的配置
多数据源配置
这里采用不同的datebase模拟多数据源。

spring:
  redis:
    host: 127.0.0.1
    port: 6379
    database: 0
    lettuce:
      pool:
        max-active: 200 #连接池最大连接数(使用负值表示没有限制)
        max-idle: 20 # 连接池中的最大空闲连接
        min-idle: 5 #连接池中的最小空闲连接
        # 这里在IDEA中显示红色错误,不用管,因为org.springframework.boot.autoconfigure.data.redis.RedisProperties.Pool.setMaxWait(Duration maxWait)
        # 方法参数是Duration,IDEA无法识别,但是会自动注入成功
        max-wait: 2000 # 当连接池耗尽时, 抛出异常之前,连接分配被阻塞的时间,也就是连接池满后最长等待时间,负值表示无限期等待
  redis2:
    host: 127.0.0.1
    port: 6379
    database: 1

由于使用了多数据源,固不可以使用默认的springboot进行加载初始化了,这里需要使用自定义config来实现。

这里需要配置lettuce连接池–> LettuceConnectionFactory–>RedisTemplate

import com.alibaba.fastjson.support.spring.FastJsonRedisSerializer;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Qualifier;
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.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.lettuce.LettuceClientConfiguration;
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.core.StringRedisTemplate;
import org.springframework.data.redis.serializer.RedisSerializer;

@Configuration
public class SpringbootConfig {

/**
     * 配置lettuce连接池
     *
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis.lettuce.pool")
    public GenericObjectPoolConfig redisPool() {
        return new GenericObjectPoolConfig<>();
    }

/**
     * 配置第一个数据源的
     *
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis")
    public RedisStandaloneConfiguration redisConfig() {
        return new RedisStandaloneConfiguration();
    }

/**
     * 配置第二个数据源
     *
     * @return
     */
    @Bean
    @ConfigurationProperties(prefix = "spring.redis2")
    public RedisStandaloneConfiguration redisConfig2() {
        return new RedisStandaloneConfiguration();
    }

/**
     * 配置第一个数据源的连接工厂
     * 这里注意:需要添加@Primary 指定bean的名称,目的是为了创建两个不同名称的LettuceConnectionFactory
     *
     * @param config
     * @param redisConfig
     * @return
     */
    @Bean("factory")
    @Primary
    public LettuceConnectionFactory factory(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig) {
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
        return new LettuceConnectionFactory(redisConfig, clientConfiguration);
    }

@Bean("factory2")
    public LettuceConnectionFactory factory2(GenericObjectPoolConfig config, RedisStandaloneConfiguration redisConfig2) {
        LettuceClientConfiguration clientConfiguration = LettucePoolingClientConfiguration.builder().poolConfig(config).build();
        return new LettuceConnectionFactory(redisConfig2, clientConfiguration);
    }

/**
     * 配置第一个数据源的RedisTemplate
     * 注意:这里指定使用名称=factory 的 RedisConnectionFactory
     * 并且标识第一个数据源是默认数据源 @Primary
     *
     * @param factory
     * @return
     */
    @Bean("redisTemplate")
    @Primary
    public RedisTemplate<String, String> redisTemplate(@Qualifier("factory") RedisConnectionFactory factory) {
        return getStringStringRedisTemplate(factory);
    }

/**
     * 配置第一个数据源的RedisTemplate
     * 注意:这里指定使用名称=factory2 的 RedisConnectionFactory
     *
     * @param factory2
     * @return
     */
    @Bean("redisTemplate2")
    public RedisTemplate<String, String> redisTemplate2(@Qualifier("factory2") RedisConnectionFactory factory2) {
        return getStringStringRedisTemplate(factory2);
    }

/**
     * 设置序列化方式 (这一步不是必须的)
     *
     * @param factory2
     * @return
     */
    private RedisTemplate<String, String> getStringStringRedisTemplate(RedisConnectionFactory factory2) {
        StringRedisTemplate template = new StringRedisTemplate(factory2);
        template.setKeySerializer(RedisSerializer.string());
        template.setValueSerializer(new FastJsonRedisSerializer<>(Object.class));
        template.setHashKeySerializer(RedisSerializer.string());
        template.setHashValueSerializer(new FastJsonRedisSerializer<>(Object.class));
        return template;
    }
}

使用也非常简单:

/**
 * 不写默认使用带有@Primary的RedisTemplate
 */
@Autowired
private RedisTemplate redisTemplate;
@Autowired
@Qualifier("redisTemplate2")
private RedisTemplate redisTemplate2;

原文:https://blog.csdn.net/liubenlong007/article/details/86477692

 
 

最新文章

  1. 微信跳转浏览器来下载不同系统的app
  2. oracle 批量插入-支持序列自增
  3. 可变长度的Fibonacci数列
  4. 分享一组很赞的 jQuery 特效【附源码下载】
  5. CenotOS ip a
  6. Object c中的alloc和init问题
  7. 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作
  8. JQuery AJAX请求aspx后台方法
  9. 鸟哥的私房菜上 xpenguins 设备(ubuntu 12.04)
  10. 微信授权登录(PHP)
  11. 70、django之Ajax初识
  12. Thread源码剖析
  13. linux 安装 PHP fileinfo 扩展
  14. Vue API(directives) 自定义指令
  15. .Net Self Hosting 的几种方式
  16. jQuery Ajax 上传文件改进
  17. 操作Wifi的工具类
  18. Web Worker 使用教程(转)
  19. Python学习笔记十:json序列化,软件结构目录规范,ATM作业讲解,import本质论
  20. 第二章:监控属性(Observables)

热门文章

  1. 如何运用C语言求(判断)素数。
  2. mq代替db
  3. ubuntu 查看版本
  4. 解决 Ubuntu16.04 + opencv4.1 源码编译错误 Makefile:160: recipe for target &#39;all&#39; failed
  5. jvm的组成入门
  6. Windows cmd 和 PowerShell 中文乱码问题解决
  7. django跳转页面传参
  8. Comet OJ-2019国庆欢乐赛
  9. java 线程之线程状态
  10. JPA使用Specification构建动态查询