博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-boot 速成(12) - 如何注入多个redis StringRedisTemplate
阅读量:4703 次
发布时间:2019-06-10

本文共 5117 字,大约阅读时间需要 17 分钟。

默认情况下,spring-boot的redis自动配置,只能注册一个StringRedisTemplate实例,如果希望注入多个,比如:1个读写database 0,1个读写database 1 ... ,默认的自动配置就不行了,可以参考下面的做法:

一、创建多实例配置类

1 package cn.mwee.order.cloud.admin.common.config;  2   3 import org.springframework.beans.factory.annotation.Value;  4 import org.springframework.context.annotation.Bean;  5 import org.springframework.context.annotation.Configuration;  6 import org.springframework.context.annotation.Primary;  7 import org.springframework.data.redis.connection.RedisConnectionFactory;  8 import org.springframework.data.redis.connection.RedisSentinelConfiguration;  9 import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; 10 import org.springframework.data.redis.core.StringRedisTemplate; 11 import org.springframework.data.redis.serializer.StringRedisSerializer; 12 import redis.clients.jedis.JedisPoolConfig; 13  14 import java.util.HashSet; 15 import java.util.Set; 16  17 /** 18  * Created by 菩提树下的杨过(http://yjmyzz.cnblogs.com/) on 19/09/2017. 19  */ 20 @Configuration 21 public class RedisConfig { 22  23     @Value("${redis.sentinel.group}") 24     protected String sentinelGroupName; 25  26     @Value("${redis.sentinel.nodes}") 27     protected String sentinelNodes; 28  29     @Value("${redis.maxTotal}") 30     protected int maxTotal; 31  32     @Value("${redis.minIdle}") 33     protected int minIdle; 34  35     @Value("${redis.maxIdle}") 36     protected int maxIdle; 37  38     @Value("${redis.maxWaitMillis}") 39     protected long maxWaitMillis; 40  41     @Value("${redis.testOnBorrow}") 42     protected boolean testOnBorrow; 43  44     @Value("${redis.testOnReturn}") 45     protected boolean testOnReturn; 46  47     @Value("${redis.password}") 48     protected String password; 49  50     @Value("${redis.timeout}") 51     protected int timeout; 52  53     @Bean 54     public RedisSentinelConfiguration redisSentinelConfiguration() { 55         String[] nodes = sentinelNodes.split(","); 56         Set
setNodes = new HashSet<>(); 57 for (String n : nodes) { 58 setNodes.add(n.trim()); 59 } 60 RedisSentinelConfiguration configuration = new RedisSentinelConfiguration(sentinelGroupName, setNodes); 61 return configuration; 62 } 63 64 @Bean 65 public JedisPoolConfig jedisPoolConfig() { 66 JedisPoolConfig poolConfig = new JedisPoolConfig(); 67 poolConfig.setMaxTotal(maxTotal); 68 poolConfig.setMinIdle(minIdle); 69 poolConfig.setMaxIdle(maxIdle); 70 poolConfig.setMaxWaitMillis(maxWaitMillis); 71 poolConfig.setTestOnBorrow(testOnBorrow); 72 poolConfig.setTestOnReturn(testOnReturn); 73 return poolConfig; 74 } 75 76 @Bean 77 public StringRedisSerializer stringRedisSerializer() { 78 return new StringRedisSerializer(); 79 } 80 81 @Bean(name = "redisTemplate00") 82 @Primary 83 public StringRedisTemplate redisTemplate00() { 84 return buildRedisTemplate(buildConnectionFactory(0)); 85 } 86 87 @Bean(name = "redisTemplate01") 88 public StringRedisTemplate redisTemplate01() { 89 return buildRedisTemplate(buildConnectionFactory(1)); 90 } 91 92 @Bean(name = "redisTemplate02") 93 public StringRedisTemplate redisTemplate02() { 94 return buildRedisTemplate(buildConnectionFactory(2)); 95 } 96 97 @Bean(name = "redisTemplate03") 98 public StringRedisTemplate redisTemplate03() { 99 return buildRedisTemplate(buildConnectionFactory(3));100 }101 102 @Bean(name = "redisTemplate04")103 public StringRedisTemplate redisTemplate04() {104 return buildRedisTemplate(buildConnectionFactory(4));105 }106 107 private JedisConnectionFactory buildConnectionFactory(int database) {108 JedisConnectionFactory connectionFactory = new JedisConnectionFactory(redisSentinelConfiguration(), jedisPoolConfig());109 connectionFactory.setUsePool(true);110 connectionFactory.setTimeout(timeout);111 connectionFactory.setDatabase(database);112 connectionFactory.setPassword(password);113 connectionFactory.afterPropertiesSet();114 return connectionFactory;115 }116 117 protected StringRedisTemplate buildRedisTemplate(RedisConnectionFactory connectionFactory) {118 StringRedisTemplate template = new StringRedisTemplate();119 template.setConnectionFactory(connectionFactory);120 template.setValueSerializer(stringRedisSerializer());121 template.afterPropertiesSet();122 return template;123 }124 125 }
View Code

 

上面的示例,注入了5个redisTemplate实例,分别对应redis的0到4,共5个database。

 

二、配置类application.yml

redis:  sentinel:    group: ${redis.sentinel.group}    nodes: ${redis.sentinel.nodes}  maxTotal: ${redis.maxTotal}  minIdle: ${redis.minIdle}  maxWaitMillis: ${redis.maxWait}  testOnBorrow: ${redis.testOnBorrow}  testOnReturn: ${redis.testOnReturn}  password:  timeout: ${redis.timeout}  

  大家把里面的占位符,换成具体值就可以了。

转载于:https://www.cnblogs.com/yjmyzz/p/how-to-inject-multi-redis-instance-in-spring-boot.html

你可能感兴趣的文章
解决在vue中,自用mask模态框出来后,下层的元素依旧可以滑动的问题
查看>>
PAT(B) 1014 福尔摩斯的约会(Java)
查看>>
PAT甲级题解-1123. Is It a Complete AVL Tree (30)-AVL树+满二叉树
查看>>
项目开发总结报告(GB8567——88)
查看>>
SSH加固
查看>>
端口扫描base
查看>>
iOS IM开发的一些开源、框架和教程等资料
查看>>
FansUnion:共同写博客计划终究还是“流产”了
查看>>
python 二维字典
查看>>
Arrays类学习笔记
查看>>
实验吧之【天下武功唯快不破】
查看>>
2019-3-25多线程的同步与互斥(互斥锁、条件变量、读写锁、自旋锁、信号量)...
查看>>
win7-64 mysql的安装
查看>>
dcm4chee 修改默认(0002,0013) ImplementationVersionName
查看>>
maven3在eclipse3.4.2中创建java web项目
查看>>
发布时间 sql语句
查看>>
黑马程序员 ExecuteReader执行查询
查看>>
记一些从数学和程序设计中体会到的思想
查看>>
题目1462:两船载物问题
查看>>
POJ 2378 Tree Cutting(树形DP,水)
查看>>