在SpringCloud项目中写了一个redis存储的工具类,使用时总是报空指针错误:

--- [nio-8001-exec-3] c.t.d.c.utils.exception.ExceptionUtil    : java.lang.NullPointerException
    at com.tfjybj.dtc.crawl.util.CrawlProgressUtil.<init>(CrawlProgressUtil.java:34)

原代码如下:

public class CrawlProgressUtil {@Resourceprivate RedisTemplate redisTemplate;//redis 命名规范 项目名称+服务名称+类名+自定义名private static String redis_key = "DTC:CRAWL:BlogServiceImpl" +":crawlBlogInfo:";HashMap<String, Object> crawlProgressMap = new HashMap<>(2);public CrawlProgressUtil() {// 将redis默认的序列化方式改为String序列化方式redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));}public void nowCrwalProgress(Integer now, Integer all, String taskName) {//将当前爬取进度存到rediscrawlProgressMap.put("currentProgress", now);crawlProgressMap.put("allProgress", all);redisTemplate.opsForHash().putAll(redis_key + taskName,crawlProgressMap);}}

经过调试发现是RedisTemplate注入的问题,语法上没发现错误,也不是注入方式的问题,上网搜索发现原来RedisTemplate的注入得分情况:Spring注入和非Spring注入,我这个工具类在Spring之外,属于非Spring注入(可简单理解为没在Service层注入),但非Spring注入不是用@Resource这种方式,应该写配置。查了查非Spring注入的方式,觉得代码有点多,我也不太理解,就改造了一下这个工具类,让RedisTemplate在Service层注入,将注入的redisTemplate通过传参的方式传入工具类中,一下为改正后的代码:

public class CrawlProgressUtil {//redis 命名规范 项目名称+服务名称+类名+自定义名private static String redis_key = "DTC:CRAWL:BlogServiceImpl" +":crawlBlogInfo:";private RedisTemplate redisTemplate;HashMap<String, Object> crawlProgressMap = new HashMap<>(2);public CrawlProgressUtil(RedisTemplate redisTemplate) {// 将redis默认的序列化方式改为String序列化方式redisTemplate.setKeySerializer(new StringRedisSerializer());redisTemplate.setValueSerializer(new StringRedisSerializer());redisTemplate.setHashKeySerializer(new StringRedisSerializer());redisTemplate.setHashValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));this.redisTemplate = redisTemplate;}public void nowCrwalProgress(Integer now, Integer all, String taskName) {//将当前爬取进度存到rediscrawlProgressMap.put("currentProgress", now);crawlProgressMap.put("allProgress", all);redisTemplate.opsForHash().putAll(redis_key + taskName,crawlProgressMap);}
}

使用方式:

在Service层实现类中注入:

@Service
public class CSDNCommentServiceImpl implements CSDNCommentService {@Resourceprivate RedisTemplate redisTemplate;//爬取的业务类//后边代码略
}

在需要存redis的位置实例化工具类并传参:

CrawlProgressUtil cpu = new CrawlProgressUtil(redisTemplate);

RedisTemplate报空指针错误相关推荐

  1. 切记切记:Spring配置文件中,Component-scan无法扫描到的类中的自动装配对象无法被调用,报空指针错误。...

    Spring单例注入,单例对象可设置成Spring元件. 只有Spring的元件中@Autowired才有用,在普通类中@Autowired虽然不会编译报错,但运行时会报空指针错误. 转载于:http ...

  2. java怎么通过坐标定位控件_[已解决] 可以定位到控件, 但每次执行 click () 方法会报空指针错误 java.lang.NullPointerException...

    问题描述: 正常启动 appium 服务, 在 eclipse 中右键 Run as TestNG Test 之后, apk 可以正常安装并启动, 但是总会在 btn.click();处报错, 错误为 ...

  3. tomcat启动一直报空指针错误

    今天部署项目的时候报出这样的错误: 十一月 28, 2013 2:30:02 下午 org.apache.coyote.http11.AbstractHttp11Processor process S ...

  4. android适配器报空指针错误,适配器总是出现空指针问题

    问题描述: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.administrator.m ...

  5. ajax提交file空指针,excel导入上传文件报空指针错误

    页面入口 全选 导入 导出 ${msg['globals.button.delete.more']} 导出js function excelImport() { top.layer.open({ ty ...

  6. jdbc mysql 存储过程执行失败_JDBC连接执行MySQL存储过程报空指针或权限错误

    JDBC连接执行MySQL存储过程报空指针或权限错误 最近使用root用户编写了几个存储过程,但是使用普通用户通过JDBC连接执行却报错: java.lang.NullPointerException ...

  7. springboot项目导入Redis依赖后在测试类中无法使用(RedisTemplate),报空指针

    问题描述: 在springboot项目导入Redis依赖后,在测试类中无法使用(RedisTemplate),报空指针 前提是都已经添加了注入注解: 添加了注解后还是会报错: 解决方法: 在启动类中加 ...

  8. java hash=0报空指针_怎么报空指针异常错误?

    源自:2-2 开发第一个自定义标签 怎么报空指针异常错误? java.lang.NullPointerException at org.apache.tomcat.util.descriptor.tl ...

  9. java:数字转string 报空指针_超干货详解:kotlin(4) java转kotlin潜规则

    前言 以一个java老鸟的角度,如何去看 kotlin. Java源代码应该如何用Kotlin重构. 如何正确学习kotlin并且应用到实际开发中.本文将会探究. 本文分两大块,重难点和潜规则. 重难 ...

最新文章

  1. 论文简述 | EAO-SLAM:基于集成数据关联的单目半稠密物体级SLAM
  2. TC260-001《汽车采集数据处理安全指南》
  3. 微信公众号新功能-原创声明、赞赏功能、评论管理、页面模版
  4. DataGridView 分页显示
  5. 7-11 堆栈操作合法性 (20 分)以及堆栈讲解(c语言实现)
  6. 工作128:element上传组件时候的钩子--event里面有数据参数
  7. Tomcat 中文路径乱码
  8. 学习一个Vue模板项目
  9. Android开源库--Gson谷歌官方json解析库
  10. Visual Studio 2013下载及其安装
  11. 嵌入式软件工程师笔试面试指南目录
  12. 【汇编与接口】并行接口8255芯片实验
  13. python如何判断tcp异常断开_TCP socket如何判断连接断开
  14. iOS之Category和Extention的区别
  15. pycharm远程连接服务器,同步代码,使用GPU
  16. EFPower tool 使用时发生的异常
  17. B站收藏备份工具设计和实现 Bilibili Memory 哔哩哔哩记忆
  18. ubuntu16.04安装ROS Kinetic(保姆式安装)
  19. Intel 11代 CPU 更新Win 10 20H2 后显示问题
  20. 免费报名参加“大数据时代的大数据分析与展现”技术分享会

热门文章

  1. error LNK2001: unresolved external symbol
  2. 【C++】初窥C++
  3. Unite Training Day报名开启,打造精彩游戏世界
  4. 中国奥运会成绩,知道多少?13张图告诉你
  5. 天猫店铺抽取的红包在哪里领取看,关于淘宝购物分享优惠商品的群
  6. 用matlab刻度尺,刻度尺如何使用
  7. SEM优化教程第5讲-百度竞价账户计划、单元搭建原则。
  8. LeetCode——552. 学生出勤记录 II(Student Attendance Record II)[困难]——分析及代码(Java)
  9. C#windows车库信息管理系统
  10. 基于工业5G网关的建筑机器人应用