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()

相关推荐
天天摸鱼的java工程师5 分钟前
高考放榜夜,系统别崩!聊聊查分系统怎么设计,三张表足以?
java·后端·mysql
天天摸鱼的java工程师13 分钟前
深入理解 Spring 核心:IOC 与 AOP 的原理与实践
java·后端
编程轨迹26 分钟前
使用 Playwright Java 框架创建自定义的请求和响应日志记录器
后端
Moonbit1 小时前
征文开启|写一篇能跑的文档,赢 MoonBit 周边 & 成为官方示例
后端
我爱Jack1 小时前
Spring Boot统一功能处理深度解析
java·spring boot·后端
惜鸟1 小时前
# LLM统一网关:LiteLLM 详细介绍(实践篇)
后端·openai
RainbowJie12 小时前
Spring Boot 使用 SLF4J 实现控制台输出与分类日志文件管理
spring boot·后端·单元测试
面朝大海,春不暖,花不开2 小时前
Spring Boot MVC自动配置与Web应用开发详解
前端·spring boot·mvc
suke2 小时前
MinIO社区版"挥刀自宫":Web管理功能全砍,社区信任岌岌可危
后端·程序员·开源
美团技术团队2 小时前
可信实验白皮书系列04:随机轮转实验
后端