Redis启动失败但无ClassNotFoundException时,首要排查spring.data.redis配置路径,因Spring Boot 3.x已弃用spring.redis.xxx旧配置项,必须统一改为spring.data.redis.xxx(含host、port、password、lettuce.pool.*等),否则RedisConnectionFactory因缺失连接参数而静默失效。

Redis启动失败但没报ClassNotFoundException?先盯住spring.data.redis配置路径
Spring Boot 3.x 不再识别 spring.redis.host 这类旧配置项,直接降级为 warning 并静默忽略——结果就是 RedisConnectionFactory 拿不到 host/port,最终在运行时抛出连接超时或空指针,而不是你预期的配置错误提示。
必须把所有 spring.redis.xxx 改成 spring.data.redis.xxx,包括:host、port、password、database、timeout、lettuce.pool.* 等。application.yml 示例:
spring:
data:
redis:
host: 127.0.0.1
port: 6379
password:
database: 0
timeout: 2000
lettuce:
pool:
max-active: 8
- 不要只改一部分,漏掉
lettuce.pool.max-active这类嵌套项也会导致连接池未生效 - 如果用了 Jedis,需额外排除 Lettuce 并显式引入
redis.clients:jedis,否则 Spring Boot 3.x 默认只加载 Lettuce -
spring.redis.ssl=true这种写法在 3.x 中完全无效,必须写成spring.data.redis.ssl=true
javax.servlet.HttpServletRequest 注入失败导致 Redis 验证码逻辑崩溃
典型报错是:java.lang.IllegalStateException: No primary or single unique constructor found for interface javax.servlet.http.HttpServletRequest。这不是 Redis 自身的问题,而是你的验证码或登录接口里,用 @RequestParam 或 @RequestBody 尝试自动注入了 HttpServletRequest,而 Spring Boot 3.x 的 DispatcherServlet 已切换为 Jakarta 版本,容器里根本不存在 javax.servlet 类型的 Bean。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 所有 Controller 方法参数中的
javax.servlet.http.HttpServletRequest必须替换成jakarta.servlet.http.HttpServletRequest - 同理检查
HttpServletResponse、ServletContext、ServletInputStream、ReadListener等类型 - 如果用了 Filter 或自定义
OncePerRequestFilter,其doFilter方法签名也得同步改参类型 - IDE 全局替换时注意别误伤注释或字符串里的
javax文本
commons-fileupload 与 Jakarta Servlet 冲突引发 Redis 文件上传失败
如果你的项目用 Redis 存验证码图片、同时又支持文件上传(比如 Excel 导入),升级后常见现象是:上传请求进不来,直接 400 或 500,日志里出现 Cannot cast jakarta.servlet.http.HttpServletRequest to javax.servlet.http.HttpServletRequest。
根本原因是 commons-fileupload:1.6.0 只认 javax.servlet 接口,而 Spring Boot 3.x 提供的是 jakarta.servlet 实例。
- 删掉旧依赖
commons-fileupload:commons-fileupload:1.6.0 - 换成 Jakarta 兼容版:
org.apache.commons:commons-fileupload2-jakarta-servlet5:2.0.0-M2 -
DiskFileItemFactory构造方式变了,不能 new,得用DiskFileItemFactory.builder().get() -
ServletFileUpload类已废弃,改用JakartaServletFileUpload - 如果上传逻辑里还调用了
request.getPart(),确保该方法来自jakarta.servlet.http.HttpServletRequest,而非遗留 wrapper 类
RedisTemplate 注入失败却提示 Hibernate 或 Validation 错误?别被误导
有时候 RedisTemplate 报 No qualifying bean,但控制台第一行异常却是 Caused by: java.lang.NoClassDefFoundError: javax/validation/ConstraintViolationException ——这说明 classpath 里混着 javax 和 jakarta 的 validation 包,ClassLoader 加载冲突,导致 Spring 容器初始化中断,后续 Redis 相关 Bean 根本没机会注册。
- 执行
mvn dependency:tree -Dincludes=javax.validation和mvn dependency:tree -Dincludes=jakarta.validation,确认两者没共存 - 检查是否手动引入了
hibernate-validator旧版(5.x),应统一用org.hibernate.validator:hibernate-validator:8.0.1.Final(Jakarta 兼容) - 若用了 Lombok,确认
@Data或@Builder生成的构造方法没意外触发 javax.validation 的早期校验(比如字段上有@NotBlank却没引入对应 API) - 这种“伪 Redis 错误”往往发生在多模块项目中,父 POM 声明了 javax 依赖,子模块 upgrade 后未 clean 掉 inherited 依赖
javax 类型残留,会让整个容器启动停在一半,连 RedisAutoConfiguration 都没走到。

















