博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
redis-手写redis切片和非切片连接池并注入springboot中
阅读量:6514 次
发布时间:2019-06-24

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

spring-data整合了redispool, 并提供redisTemplate使用, 但有时需要用到shradedJedisPool, 就需要手动注入了

手写redispool并注入springboot中

1, redis配置文件

redis.properties

redis.config.ip=192.168.50.37redis.config.port=6379redis.config.maxTotal=20redis.config.maxIdle=5redis.config.maxWaitmillis=10000redis.config.testOnborrow=false

2, RedisClientConfig.java, 获取spring注入的属性值

package com.iwhere.learn.redis.java;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.context.annotation.PropertySource;import org.springframework.stereotype.Component;/** * 使用一个专门的类来获取配置文件 * @author wenbronk * @time 2017年4月6日  上午11:11:57  2017 */@Component(value="redisClientConfig")@ConfigurationProperties(prefix = "redis.config")@PropertySource("classpath:source/redis.properties")public class RedisClientConfig {    private String ip;    private int port;    private int maxTotal;    private int maxIdle;    private long maxWaitmillis;    private boolean testOnborrow;        public String getIp() {        return ip;    }    public void setIp(String ip) {        this.ip = ip;    }    public int getPort() {        return port;    }    public void setPort(int port) {        this.port = port;    }    public int getMaxTotal() {        return maxTotal;    }    public void setMaxTotal(int maxTotal) {        this.maxTotal = maxTotal;    }    public int getMaxIdle() {        return maxIdle;    }    public void setMaxIdle(int maxIdle) {        this.maxIdle = maxIdle;    }    public long getMaxWaitmillis() {        return maxWaitmillis;    }    public void setMaxWaitmillis(long maxWaitmillis) {        this.maxWaitmillis = maxWaitmillis;    }    public boolean isTestOnborrow() {        return testOnborrow;    }    public void setTestOnborrow(boolean testOnborrow) {        this.testOnborrow = testOnborrow;    }}

3, RedisClientUtils, 用于生成 jedisPool 并注入spring中

package com.iwhere.learn.redis.java;import java.util.ArrayList;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import redis.clients.jedis.Jedis;import redis.clients.jedis.JedisPool;import redis.clients.jedis.JedisPoolConfig;import redis.clients.jedis.JedisShardInfo;import redis.clients.jedis.ShardedJedis;import redis.clients.jedis.ShardedJedisPool;/** * 用于获取redis连接池 *  * @author wenbronk * @time 2017年3月24日 下午1:43:36 2017 */@Componentpublic class RedisClientUtil {        @Autowired    private RedisClientConfig redisClientConfig;        /** 非切片连接池 */    private JedisPool jedisPool;        /** 切片连接池 */    private ShardedJedisPool shardedJedisPool;        /**     * 初始化非切片连接池     */    public JedisPool getJedisPool() {        JedisPoolConfig config = new JedisPoolConfig();        config.setMaxTotal(redisClientConfig.getMaxTotal());        config.setMaxIdle(redisClientConfig.getMaxIdle());        config.setMaxWaitMillis(redisClientConfig.getMaxWaitmillis());        config.setTestOnBorrow(redisClientConfig.isTestOnborrow());        jedisPool = new JedisPool(config, redisClientConfig.getIp(), redisClientConfig.getPort());        return jedisPool;    }    /**     * 初始化切片连接池     *///    @Bean(name="shardedJedisPool")    public ShardedJedisPool getShardedJedisPool() {        // 池基本配置        JedisPoolConfig config = new JedisPoolConfig();        config.setMaxTotal(redisClientConfig.getMaxTotal());        config.setMaxIdle(redisClientConfig.getMaxIdle());        config.setMaxWaitMillis(redisClientConfig.getMaxWaitmillis());        config.setTestOnBorrow(redisClientConfig.isTestOnborrow());        ArrayList
list = new ArrayList
(); list.add(new JedisShardInfo(redisClientConfig.getIp(), redisClientConfig.getPort(), "master")); shardedJedisPool = new ShardedJedisPool(config, list); return shardedJedisPool; } public JedisPool getSingleJedisPool() { if (jedisPool == null) { synchronized(RedisClientUtil.class) { if (jedisPool == null) { return getJedisPool(); } } } return jedisPool; } @Bean(name="jedis") public Jedis getJedis() { return getSingleJedisPool().getResource(); }// @Bean(name="shardedJedis") public ShardedJedis getShardedJedis() { return shardedJedisPool.getResource(); }}

4, 引入注值所需要的依赖和注解

pom.xml中

org.springframework.boot
spring-boot-configuration-processor
true

入口程序中, springboot环境

package com.iwhere.learn;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.boot.web.servlet.ServletComponentScan;import org.springframework.web.bind.annotation.RestController;import com.iwhere.learn.redis.java.RedisClientConfig;import com.iwhere.learn.redis.java.RedisClientUtil;@RestController@SpringBootApplication@EnableConfigurationPropertiespublic class APP {    public static void main(String[] args) {        SpringApplication.run(APP.class, args);    }    }

 

在使用redis时, 就可以通过 @Autowired 进行注入了

 

系列原创, 转载请注明出处, 谢谢 @Wenbronk: http://www.cnblogs.com/wenbronk/p/6672054.html

 

你可能感兴趣的文章
产品经理学习总结之技术和设计篇
查看>>
vue之组件认知
查看>>
23种设计模式(15):备忘录模式
查看>>
java基础学习总结——IO流
查看>>
iOS获取APP ipa 包以及资源文件
查看>>
类加载器总结
查看>>
IOS TCP通讯
查看>>
开博纪念
查看>>
linux关机和重启命令
查看>>
CPU存储电路之寄存器——《30天自制操作系统》笔记
查看>>
我的友情链接
查看>>
两款实现一键安装WordPress的程序
查看>>
淘宝评论关键词提取方案
查看>>
五种常用web服务器jvm参数设置
查看>>
关于dom4j中的一些注意细节,Element和Node的区别
查看>>
我的友情链接
查看>>
解决中文乱码问题
查看>>
git compare for docx file
查看>>
局域网内部署 Docker Registry
查看>>
小程序
查看>>