springboot项目下面的单元测试注入的RedisConnectionFactory类redisConnectionFactory值为什么为空呢?
你遇到的问题是:
RedisConnectionFactory redisConnectionFactory 在单元测试中为 null
这是 Spring Boot 单元测试中非常常见的问题,根本原因是你的测试类没有启用 Spring 容器上下文,导致 @Resource 注解无法注入 Bean。
✅ 正确做法:使用 Spring Boot 的单元测试支持
✅ 1. 添加必要的注解
你需要在你的测试类上加上如下两个关键注解:
Java
深色版本
@RunWith(SpringRunner.class)
@SpringBootTest
这样 Spring 才能启动上下文,并完成自动装配。
✅ 2. 修改后的完整代码如下:
Java
深色版本
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import javax.annotation.Resource;
import java.util.Properties;
@RunWith(SpringRunner.class) // 启用 Spring 测试支持
@SpringBootTest // 启动 Spring Boot 上下文
public class RedisConnectionFactoryTest {
@Resource
private RedisConnectionFactory redisConnectionFactory;
@Test
public void test1() {
// 默认 class org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
System.out.println(redisConnectionFactory.getClass());
// 当前db的key数量
Long keyCount = redisConnectionFactory.getConnection().dbSize();
System.out.println("当前db的key数量 = " + keyCount);
Properties properties = redisConnectionFactory.getConnection().info();
System.out.println(properties);
}
}
📌 注意事项:
如果你在项目中同时配置了 Jedis 和 Lettuce(如你的 application.yml 所示),Spring Boot 默认会优先使用 Lettuce。
确保你的 Redis 服务器可以被访问:
IP、端口是否正确?
是否有防火墙限制?
密码是否正确?
🔍 可选:查看当前使用的 Redis 客户端类型
你可以通过打印 redisConnectionFactory 的类型来确认当前使用的是哪个客户端:
Java
深色版本
System.out.println(redisConnectionFactory.getClass());
// 输出示例:class org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory
✅ 补充说明:为什么之前为空?
你原来的测试类只是一个普通的 JUnit 测试类,没有加载 Spring 上下文,所以 Spring 无法识别 @Resource 或 @Autowired 注解,也就不会为你注入任何 Bean。
原因 解释
没有 @SpringBootTest Spring 上下文未启动,Bean 无法注入
没有 @RunWith(SpringRunner.class) JUnit 不知道要和 Spring 集成
所以 redisConnectionFactory == null Spring 没有注入
✅ 总结
问题 原因 解决方案
redisConnectionFactory 为 null 没有启用 Spring 上下文 添加 @SpringBootTest 和 @RunWith(SpringRunner.class)
无法连接 Redis 配置错误或网络不通 检查 Redis 地址、密码、端口、防火墙等
不确定使用的是 Jedis 还是 Lettuce 默认是 Lettuce 查看 redisConnectionFactory.getClass()
相关文章:
springboot项目下面的单元测试注入的RedisConnectionFactory类redisConnectionFactory值为什么为空呢?
你遇到的问题是: RedisConnectionFactory redisConnectionFactory 在单元测试中为 null 这是 Spring Boot 单元测试中非常常见的问题,根本原因是你的测试类没有启用 Spring 容器上下文,导致 Resource 注解无法注入 Bean。 ✅ 正确做法&…...

MyBatis操作数据库(2)
1.#{}和${}使用 Interger类型的参数可以看到这里显示的语句是:select username,password,age,gender,phone from userinfo where id? 输入的参数并没有在后面进行拼接,,id的值是使用?进行占位,这种sql称之为"预编译sql".这里,把#{}改成${}观察情况:这里可以看到…...

C++面向对象(二)
面向对象基础内容参考: C面向对象(一)-CSDN博客 友元函数 类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定…...

【C语言入门级教学】冒泡排序和指针数组
文章目录 1.冒泡排序2.⼆级指针3.指针数组4.指针数组模拟⼆维数组 1.冒泡排序 冒泡排序的核⼼思想:两两相邻的元素进⾏⽐较。 //⽅法1 void bubble_sort(int arr[], int sz)//参数接收数组元素个数 { int i 0;for(i0; i-1; i) { int j 0; for(j0; j-1; j) { …...

shell脚本中常用的命令
一、设置主机名称 通过文件的方式修改通过命令修改 二、nmcli 查看网卡 ip a s ens160 (网卡名称) ifconfig ens160 nmcli device show ens160 nmcli device status nmcli connection show ens160 2.设置网卡 a)当网卡没有被设置时 b)网卡被设定,需要修改 三…...

Nuxt3部署
最近接了一个项目,需要用到 nuxt3 技术来满足甲方所要求的需求,在部署的时候遇到了很多问题,这里我一一给大家讲述部署流程,以及所遇到的坑 打包部署 部署分为俩种方式: 静态(spa)部署 和 ssr部署 静态部署 静态部…...

网络攻防技术一:绪论
文章目录 一、网络空间CyberSpace1、定义2、基本四要素 二、网络空间安全1、定义2、保护对象3、安全属性4、作用空间 三、网络攻击1、攻击分类2、攻击过程 四、网络防护1、定义2、安全模型3、安全服务5类4、特定安全机制8种5、普遍性安全机制5种 五、网络安全技术发展简史1、第…...

【人工智能】deepseek七篇论文阅读笔记大纲
七篇文章看了整整五天,加上整理笔记和问ds优化,大致的框架是有了。具体的公式细节比较多,截图也比较麻烦,就不列入大纲去做笔记了。 DeepSeek-LLM:一切的起点,所以探索的东西比较多,包括&#x…...
unix/linux source 命令,在当前的 Shell 会话中读取并执行指定文件中的命令
source 命令 (或者它的POSIX等效命令 .):在当前 Shell 环境中执行脚本 简单来说,source 命令的作用是:在当前的 Shell 会话中读取并执行指定文件中的命令。 这意味着,被 source 执行的脚本中的所有命令,就好像是你直接在当前的命令行提示符下逐行输入并执行的一样。 核…...
[leetcode] 二分算法
本文介绍算法题中常见的二分算法。二分算法的模板框架并不复杂,但是初始左右边界的取值以及左右边界如何向中间移动,往往让我们头疼。本文根据博主自己的刷题经验,总结出四类题型,熟记这四套模板,可以应付大部分二分算…...
imgsz参数设置
在YOLOv8中,imgsz参数控制输入图像的尺寸,它直接影响模型的精度、速度和显存占用。对于1280720像素的原始图片,选择合适的imgsz需要平衡以下因素: 一、推荐设置 1. 兼顾精度与速度(推荐) model<...

【算法】分支限界
一、基本思想 (分支限界, 分枝限界, 分支界限 文献不同说法但都是一样的) 分支限界法类似于回溯法,也是一种在问题的解空间树上搜索问题解的算法。 但一般情况下,分支限界法与回溯法的求解目标不同。回溯…...
使用 C/C++ 和 OpenCV 调用摄像头
使用 C/C 和 OpenCV 调用摄像头 📸 OpenCV 是一个强大的计算机视觉库,它使得从摄像头捕获和处理视频流变得非常简单。本文将指导你如何使用 C/C 和 OpenCV 来调用摄像头、读取视频帧并进行显示。 准备工作 在开始之前,请确保你已经正确安装…...
历史数据分析——广州港
个股简介 公司简介: 华南地区最大的综合性主枢纽港。 本公司是由广州港集团、国投交通、广州发展作为发起人,共同出资以发起方式设立的股份有限公司。 经营分析: 一般经营项目:企业管理服务(涉及许可经营项目的除外);港务船舶调度服务;船舶通信服务;企业自有资金…...

数据库管理与高可用-MySQL全量,增量备份与恢复
目录 #1.1MySQL数据库备份概述 1.1.1数据备份的重要性 1.1.2数据库备份类型 1.1.3常见的备份方法 #2.1数据库完全备份操作 2.1.1物理冷备份与恢复 2.1.2mysqldump备份与恢复 2.1.3MySQL增量备份与恢复 #3.1制定企业备份策略的思路 #4.1扩展:MySQL的GTID 4.1.1My…...

从gitee仓库中恢复IDEA项目某一版本
神奇的功能!!!代码改乱了,但是还有救! 打开终端,输入git log 复制想要恢复版本的提交哈希值,打开终端输入git reset --hard <哈希值> ,就能修复到那时的提交版本了...

用dayjs解析时间戳,我被提了bug
引言 前几天开发中突然接到测试提的一个 Bug,说我的时间组件显示异常。 我很诧异,这里初始化数据是后端返回的,我什么也没改,这bug提给我干啥。我去问后端:“这数据是不是有问题?”。后端答:“…...
[git每日一句]Changes not staged for commit
在 Git 中,"Changes not staged for commit" 的意思是: 你有已修改的文件,但尚未使用 git add 将它们添加到暂存区(Staging Area),因此这些更改不会被包含在下次提交中。 具体含义 已修改但未暂…...
架构师面试题整理
以下是从提供的HTML代码中提取的所有class"title-txt"的文本内容,已排除重复项并按顺序整理: 缓存专题 实战解决大规模缓存击穿导致线上数据库压力暴增面试常问的缓存穿透是怎么回事基于DCL机制解决突发性热点缓存并发重建问题实战Redis分布…...

类和对象:实现日期类
目录 概述 一.实现日期类的基本框架 二.实现比较的运算符重载 1.>的运算符重载 2.的运算符重载 3.其余的比较运算符重载 三.加减天数的运算符重载 1.,的运算符重载 2.-,-的运算符重载 3.对1和2的小优化 四.两个日期类相减的重载 1.,--的重…...

基于springboot的运动员健康管理系统
博主介绍:java高级开发,从事互联网行业六年,熟悉各种主流语言,精通java、python、php、爬虫、web开发,已经做了六年的毕业设计程序开发,开发过上千套毕业设计程序,没有什么华丽的语言࿰…...

华为云Flexus+DeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤
华为云FlexusDeepSeek征文 | 初探华为云ModelArts Studio:部署DeepSeek-V3/R1商用服务的详细步骤 前言一、华为云ModelArts Studio平台介绍1.1 ModelArts Studio介绍1.2 ModelArts Studio主要特点1.3 ModelArts Studio使用场景1.4 ModelArts Studio产品架构 二、访问…...

下载即转化的商业密码:解析华为应用商店CPD广告的智能投放逻辑
在移动互联网流量红利见顶的背景下,华为应用市场凭借其终端生态优势正成为开发者获客的新蓝海。数据显示,2025年Q1华为应用商店全球分发量同比增长27%,其中CPD广告因其"下载才付费"的精准特性,已成为金融、游戏、工具类…...

分布式锁和数据库锁完成接口幂等性
1、分布式锁 唯一主键与乐观锁的本质是使用了数据库的锁,但由于数据库锁的性能不太好,所以我们可使用Redis、Zookeeper等中间件来实现分布式锁的功能,以Redis为例实现幂等:当用户通过浏览器发起请求,服务端接收到请求…...

浅谈JMeter之常见问题Address already in use: connect
浅谈JMeter之常见问题Address already in use: connect 在JMeter高并发测试中出现“address already in use”错误,主要源于Windows系统的TCP端口资源耗尽及连接配置问题,在执行JMeter中查看结果树 原因分析 GET请求默认采用短连接(Conne…...

【机器学习基础】机器学习入门核心算法:随机森林(Random Forest)
机器学习入门核心算法:随机森林(Random Forest) 1. 算法逻辑2. 算法原理与数学推导2.1 核心组件2.2 数学推导2.3 OOB(Out-of-Bag)误差 3. 模型评估评估指标特征重要性可视化 4. 应用案例4.1 医疗诊断4.2 金融风控4.3 遥…...

【深度学习】12. VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4
VIT与GPT 模型与语言生成:从 GPT-1 到 GPT4 本教程将介绍 GPT 系列模型的发展历程、结构原理、训练方式以及人类反馈强化学习(RLHF)对生成对齐的改进。内容涵盖 GPT-1、GPT-2、GPT-3、GPT-3.5(InstructGPT)、ChatGPT …...

常规算法学习
算法 1. 排序算法1. 归并排序1.1 普通归并排序1.2 优化后的归并排序(TimSort) 2. 插入排序2.1 直接插入排序2.2 二分插入排序2.3 成对插入排序 3. 快速排序3.1 单轴快速排序3.2 双轴快排 4. 计数排序 2. 树1. 红黑树(Red Black Treeÿ…...

Google 发布的全新导航库:Jetpack Navigation 3
前言 多年来,Jetpack Navigation 库一直是开发者的重要工具,但随着 Android 用户界面领域的发展,特别是大屏设备的出现和 Jetpack Compose 的兴起,Navigation 的功能也需要与时俱进。 今年的 Google I/O 上重点介绍了 Jetpack Na…...

Arbitrum Stylus 合约实战 :Rust 实现 ERC20
在《Arbitrum Stylus 深入解析与 Rust 合约部署实战》篇中,我们深入探讨了 Arbitrum Stylus 的核心技术架构,包括其 MultiVM 机制、Rust 合约开发环境搭建,以及通过 cargo stylus 实现简单计数器合约的部署与测试。Stylus 作为 Arbitrum Nitr…...