为什么Spring Boot 2.x升级到3.x后Redis报错_检查jakarta包路径替换问题

星婷姑娘_7721

星婷姑娘_7721

2026-06-15

276人浏览

原创

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

为什么spring boot 2.x升级到3.x后redis报错_检查jakarta包路径替换问题

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 Skill - 高性能缓存管理
Redis Skill - 高性能缓存管理

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 依赖
真正卡住的点,往往不是 Redis 本身,而是 Jakarta 迁移不彻底导致的 Bean 创建链断裂——某个看似无关的 javax 类型残留,会让整个容器启动停在一半,连 RedisAutoConfiguration 都没走到。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

spring boot redis

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

2025.08.06

2331

22

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

2026.01.26

437

25

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4289

19

内存数据库有哪些
内存数据库有哪些

内存数据库有Redis、Memcached、Apache Ignite、VoltDB、TimesTen、H2 Database、Aerospike、Oracle TimesTen In-Memory Database、SAP HANA和ache Cassandra。更多关于内存数据库相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.14

3775

11

mongodb和redis哪个读取速度快
mongodb和redis哪个读取速度快

redis 的读取速度比 mongodb 更快。原因包括:1. redis 使用简单的键值存储,而 mongodb 存储 json 格式的数据,需要解析和反序列化。2. redis 使用哈希表快速查找数据,而 mongodb 使用 b-tree 索引。因此,redis 在需要高性能读取操作的应用程序中是一个更好的选择。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.02

6832

6

redis怎么做缓存服务器
redis怎么做缓存服务器

redis 作为缓存服务器的答案:redis 是一款开源、高性能、分布式的键值存储,可作为缓存服务器使用。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

623

6

redis怎么解决数据一致性
redis怎么解决数据一致性

redis 提供了两种一致性模型,以维护副本数据一致性:强一致性 (sync) 确保写操作仅在复制到所有从节点后才完成;最终一致性 (async) 则在主节点上写操作后认为已完成,牺牲一致性换取性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

736

6

mysql和redis怎么保证双写一致性
mysql和redis怎么保证双写一致性

确保 mysql 和 redis 双写一致性的技术包括:1、事务性更新:同时更新 mysql 和 redis,保证一致性;2、主从复制:mysql 主服务器更改同步到 redis 从服务器;3、基于事件的更新:mysql 记录更改并发送到 redis等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

6442

6

redis缓存一般存些什么数据
redis缓存一般存些什么数据

redis缓存中存储的数据类型包括:字符串、哈希、列表、集合、有序集合、位图、地理空间数据和hyperloglog。这些数据类型适用于存储各种数据,从简单信息到复杂对象和地理位置。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.07

1140

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Spring Boot 官方快速入门指南
Spring Boot 官方快速入门指南

共0课时 | 0人学习

Spring Boot 官方参考文档
Spring Boot 官方参考文档

共0课时 | 0人学习

尚硅谷新版SpringBoot3教程
尚硅谷新版SpringBoot3教程

共0课时 | 0人学习