如何解决redisTemplate注入为空问题
springboot2.*集成redis时,redis工具类中的redisTemplate注入后总是为空。
问题代码还原:
1、工具类定义成静态工具类,@Resource注入redisTemplate
public class RedisCacheUtil { @Resource private static RedisTemplate<String, Object> redisTemplate; /** * 普通缓存获取 * @param key 键 * @return 值 */ public static Object get(String key) { return key == null ? null:redisTemplate.opsForValue().get(key); //redisTemplate对象一直为null } }
2、控制层直接调用工具类的静态方法
@RequestMapping("/getCache") public Object getCache(String key){ return RedisCacheUtil.get(key); }
解决方案:
1、将工具类注入到spring容器
@Component //注入spring容器 public class RedisCacheUtil { @Resource private RedisTemplate<String, Object> redisTemplate; /** * 普通缓存获取 * @param key 键 * @return 值 */ public Object get(String key) { return key == null ? null : redisTemplate.opsForValue().get(key); } }
2、再将工具类bean注入调用方
@Resource private RedisCacheUtil redisCacheUtil; @RequestMapping("/getCache") public Object getCache(String key){ return redisCacheUtil.get(key); }
至此,问题解决,仅做记录。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
Spring Boot单元测试中使用mockito框架mock掉整个RedisTemplate的示例
概述 当我们使用单元测试来验证应用程序代码时,如果代码中需要访问Redis,那么为了保证单元测试不依赖Redis,需要将整个Redis mock掉.在Spring Boot中结合mockito很容易做到这一点,如下代码: import org.mockito.Mockito; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration
-
Redis Template实现分布式锁的实例代码
前言 分布式锁一般有三种实现方式:1. 数据库乐观锁:2. 基于Redis的分布式锁:3. 基于ZooKeeper的分布式锁.本篇博客将介绍第二种方式,基于Redis实现分布式锁.虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁. 可靠性 首先,为了确保分布式锁可用,我们至少要确保锁的实现同时满足以下四个条件: 1.互斥性.在任意时刻,只有一个客户端能持有锁. 2.不会发生死锁.即使有一个
-
Spring学习笔记之RedisTemplate的配置与使用教程
前言 Spring针对Redis的使用,封装了一个比较强大的Template以方便使用:之前在Spring的生态圈中也使用过redis,但直接使用Jedis进行相应的交互操作,现在正好来看一下RedisTemplate是怎么实现的,以及使用起来是否更加便利 I. 基本配置 1. 依赖 依然是采用Jedis进行连接池管理,因此除了引入 spring-data-redis之外,再加上jedis依赖,pom文件中添加 <dependency> <groupId>org.springfra
-
在Java中使用redisTemplate操作缓存的方法示例
背景 在最近的项目中,有一个需求是对一个很大的数据库进行查询,数据量大概在几千万条.但同时对查询速度的要求也比较高. 这个数据库之前在没有使用Presto的情况下,使用的是Hive,使用Hive进行一个简单的查询,速度可能在几分钟.当然几分钟也并不完全是跑SQL的时间,这里面包含发请求,查询数据并且返回数据的时间的总和.但是即使这样,这样的速度明显不能满足交互式的查询需求. 我们的下一个解决方案就是Presto,在使用了Presto之后,查询速度降到了秒级.但是对于一个前端查询界面的交互式查询来
-
spring使用RedisTemplate的操作类访问Redis
事务需要开启enableTransactionSupport,然后使用@transactional注解,里面直接通过回调的connection,就不需要自己进行multi和exec的事务开启提交了.但是通过回调去获取connection,完全没有达到一个模版类的功能.所以这篇我们会讲下几种Operations接口提供的方法. private ValueOperations<K, V> valueOps; private ListOperations<K, V> listOps; p
-
通过RedisTemplate连接多个Redis过程解析
前言 在集群环境的情况下连接多个Redis数据库是很正常的情况,因为平时都是使用本地环境的单Redis情况比较多,在这里用代码总结一下连接多个数据库的情况(主要是不同ip,同一个ip的不通数据库修改不通地方即可),这里还是使用的springboot提供的spring-boot-starter-data-redis工具包,具体介绍如下: 1.引入redis相关的jar <parent> <groupId>org.springframework.boot</groupId>
-
Spring boot项目redisTemplate实现轻量级消息队列的方法
背景 公司项目有个需求, 前端上传excel文件, 后端读取数据.处理数据.返回错误数据, 最简单的方式同步处理, 客户端上传文件后一直阻塞等待响应, 但用户体验无疑很差, 处理数据可能十分耗时, 没人愿意傻等, 由于项目暂未使用ActiveMQ等消息队列中间件, 而redis的lpush和rpop很适合作为一种轻量级的消息队列实现, 所以用它完成此次功能开发 一.本文涉及知识点 excel文件读写--阿里easyexcel sdk 文件上传.下载--腾讯云对象存储 远程服务调用--restTe
-
spring整合redis以及使用RedisTemplate的方法
需要的jar包 spring-data-Redis-1.6.2.RELEASE.jar jedis-2.7.2.jar(依赖 commons-pool2-2.3.jar) commons-pool2-2.3.jar spring-redis.xml 配置文件 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/sc
-
如何解决redisTemplate注入为空问题
springboot2.*集成redis时,redis工具类中的redisTemplate注入后总是为空. 问题代码还原: 1.工具类定义成静态工具类,@Resource注入redisTemplate public class RedisCacheUtil { @Resource private static RedisTemplate<String, Object> redisTemplate; /** * 普通缓存获取 * @param key 键 * @return 值 */ publi
-
spring中@Reference注入为空的解决方法
线上发生事故了 前天晚上上线一波,发生了一个挺有意思的事,昨天复盘了一下,今天分享一下. 晚上的时候,我负责的系统和收银系统同时上线一波(用的是Dubbo).然后很神奇的事情发生了,收银系统用@Reference注解注入我的接口,然后这个接口的实现类居然为空. 其实我们当时没排查出来是什么原因? 重启了一下就好了,毕竟重启大法好. 但本着不能给用户充钱的路上造成阻碍,还是要排查一波这个代理对象为空是如何造成的. 线上dubbo的版本为2.8.9,注意包名是(com.alibaba) 为了方便大家
-
MySQL解决SQL注入的另类方法详解
本文实例讲述了MySQL解决SQL注入的另类方法.分享给大家供大家参考,具体如下: 问题解读 我觉得,这个问题每年带来的成本可以高达数十亿美元了.本文就来谈谈,假定我们有如下 SQL 模板语句: select * from T where f1 = '{value1}' and f2 = {value2} 现在我们需要根据用户输入值填充该语句: value1=hello value2=5 我们得到了下面的 SQL 语句,我们再提交给数据库: select * from T where f1='h
-
通过ibatis解决sql注入问题
于ibaits参数引用可以使用#和两种写法,其中#写法会采用预编译方式,将转义交给了数据库,不会出现注入问题:如果采用两种写法,其中#写法会采用预编译方式,将转义交给了数据库,不会出现注入问题:如果采用写法,则相当于拼接字符串,会出现注入问题. 例如,如果属性值为"' or '1'='1 ",采用#写法没有问题,采用写法就会有问题.对于语句,难免要使用写法就会有问题.对于like语句,难免要使用写法, 1. 对于Oracle可以通过'%'||'#param#'||'%'避免: 2. 对
-
快速解决ajax传递为空但显示在页面上为undefined的问题
昨天写代码遇到一个问题,这个问题以前也遇到过,只不过那时以为简单就没做什么笔记,结果昨天遇到还是要去查百度,查百度又要找好一会儿,所以就记录一下.避免以后忘记. 首先问题是这样的:我用ajax到动态的做表格插入,从后台传回来一个对象的list集合,然后进行遍历动态的生成表格的行.后台写的都正确的,结果表格有些内容为显示为undefined.后来我调试了一下发现ajax自动的把为空的字段设成了undefined. //这是修改后的ajax代码 $("#ss").click(functio
-
解决for循环为空不需要判断的问题
关于网上说的增强式for和普通for循环为空不需要判断的问题: public class testData { public static void main(String[] args) { List<String> list = new ArrayList<>(); for ( String str:list){ System.out.println("11"); } for (int i = 0; i < list.size(); i++) { Sy
-
解决RedisTemplate调用increment报错问题
使用spring redis的increment方法时,报错: nested exception is redis.clients.jedis.exceptions.JedisDataException: ERR value is not an integer or out of range 一.INCRBY key increment INCRBY key increment介绍如下: 将 key 所储存的值加上增量 increment .如果 key 不存在,那么 key 的值会先被初始化为
-
JAVA8妙用Optional解决判断Null为空的问题方法
目录 引言 API介绍 1.Optional(T value),empty(),of(T value),ofNullable(T value) 2.orElse(T other),orElseGet(Supplier<? extends T> other)和orElseThrow(Supplier<? extends X> exceptionSupplier) 3.map(Function<? super T, ? extends U> mapper)和flatMap(
-
SpringBoot @Autowired注入为空的情况解读
目录 @Autowired注入为空的情况解读 记录下 @Autowired注入bean找不到异常 异常描述 问题原因 总结 @Autowired注入为空的情况解读 因最近在开发中遇到了使用@Autowired注解 自动装配时,会报空指针,发现对象并没有装配进来,通过查询,总结了几种可能造成这种情况的原因. 记录下 1.最简单的一种情况,查看被装配的类,也就是@Autowired注解下的类是否添加了注解交给SpringBoot托管,@service等注解,或者是直接加上@Component注解.
-
Java反射机制如何解决数据传值为空的问题
目录 反射机制数据传值为空的问题 java反射处理空值 反射机制数据传值为空的问题 两个小方法,用于解决BeanUtils.copyProperties(x, y);中源对象的值为空问题 1.通过实体注解数据库字段为Map的Key,需要的非空值为Value封装数据 @Override public Map<String, Object> setNodeParamItems(DispatchInfoItem dispatchInfoItem) throws NoSuchMethodExc
随机推荐
- 静态的动态续篇之来点XML
- nginx HTTP模块配置常用指令
- php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
- linux shell中的比较符号与特殊符号介绍
- 两个JSP页面父页面获取子页面内容的两种方法
- JavaScript 布尔操作符解析 && || !
- Node.JS中事件轮询(Event Loop)的解析
- 捕获浏览器关闭、刷新事件不同情况下的处理方法
- PowerShell查找分区中最大文件的方法(查找文件并按大小排序)
- jquery 删除字符串最后一个字符的方法解析
- jQuery鼠标悬浮链接弹出跟随图片实例代码
- C#使用GDI绘制矩形的方法
- PHP读取大文件末尾N行的高效方法推荐
- 惊现统计站背后隐藏的巨大黑幕 怕怕第1/2页
- java时间日期使用与查询代码详解
- python构建深度神经网络(DNN)
- VBS 脚本中的字典、动态数组、队列和堆栈实现代码
- PyTorch中Tensor的拼接与拆分的实现
- 两个surfaceView实现切换效果
- 详解在阿里云上搭建自己的git服务器