spring cloud 学习(3) - feign入门
时间:2022-04-22
本文章向大家介绍spring cloud 学习(3) - feign入门,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
默认情况下,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<String> 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 }
上面的示例,注入了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}
大家把里面的占位符,换成具体值就可以了。
- poj------(3468)A Simple Problem with Integers(区间更新)
- hdu-------(1698)Just a Hook(线段树区间更新)
- NBitcoin:密码学第2部分
- gh-ost:在线DDL修改MySQL表结构工具
- poj-----(2828)Buy Tickets(线段树单点更新)
- javaSE之线程联合
- ASM 翻译系列第三十一弹:了解ASM文件的空间分配
- 备份重于一切:远离“Gitlab删库事件”,QBackup是你的最佳选择!
- FFMPEG指令
- Gitlab删库事件回顾,备份手段还停留在“原始社会”?
- ASM 翻译系列第三十二弹:自制数据抽取小工具
- WordPress集成SendCloud邮件代发,规避SMTP泄漏网站主机真实IP的风险
- ASM 翻译系列第三十三弹:REQUIRED_MIRROR_FREE_MB的含义
- 放弃Python转向Go语言:这9大理由就够了 !(附代码)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释