
深渊巨坑!!!关于若依项目使用RedisUtil报错java.lang.ClassNotFoundException: org.springframework.data.redis.core.RedisTemplate
深渊巨坑!!!关于若依项目使用RedisUtil报错java.lang.ClassNotFoundException: org.springframework.data.redis.core.RedisTemplate
问题概述
事情是这样的,每周例行代码合并的时候同事提上来一个redisUtil
在他本地没事,但是在我机器上启动报错
1 | java.lang.ClassNotFoundException:org.springframework.data.redis.core.RedisTemplate |
起初以为redis依赖问题,ai也是这么提示的:不是代码写错,而是 jar 没引;把 spring-boot-starter-data-redis +commons-pool2 加进来,启动立刻好 —— kimi
然后我就顺着这个思路做了如下操作:
删除spring-boot-starter-data-redis版本指定
添加commons-pool2依赖
查看两个包之间的依赖关系
通过mvn dependency:tree | Select-String redis查看redis是否引入
依赖已经成功引入:
1
2
3
4
5PS C:\Users\Administrator\Desktop\nh-mistake-note-book\notebook-framework> mvn dependency:tree | Select-String redis
[INFO] | | | +- io.netty:netty-codec-redis:jar:4.1.92.Final:compile
[INFO] +- org.springframework.boot:spring-boot-starter-data-redis:jar:2.5.15:c
ompile
[INFO] | \- org.springframework.data:spring-data-redis:jar:2.5.12:compile
问题排查到这里就要感谢“通义”大佬给出的如下建议:
❓那为什么还会报 java.lang.ClassNotFoundException: org.springframework.data.redis.core.RedisTemplate?
既然依赖存在,问题几乎可以确定不是 Maven 依赖缺失,而是以下 运行时环境或类加载问题:
🔍 最可能的原因:Spring Boot DevTools 的重启类加载器(RestartClassLoader)隔离问题
你在错误日志中看到的是:
1 java.lang.ClassNotFoundException: org.springframework.data.redis.core.RedisTemplate at java.net.URLClassLoader... at org.springframework.boot.devtools.restart.classloader.RestartClassLoader...
这明确表明:
- 应用使用了 Spring Boot DevTools
- DevTools 启用了“热重启”(LiveReload),它会创建一个 隔离的 RestartClassLoader
- 某些 JAR(尤其是本地模块如 notebook-common/framework)未被正确加载进 RestartClassLoader 的 classpath
🧠 原理简述:
DevTools 默认只将 项目主模块(如 notebook-admin) 及其直接依赖视为“可重启类”,而 多模块项目中的内部模块(如 notebook-framework)可能被排除在外,导致 RedisUtil 能编译通过,但运行时找不到 RedisTemplate(因为 framework 模块的类被 RestartClassLoader 加载,而 RedisTemplate 被 AppClassLoader 加载,或反之,造成不一致)。
解决方法
在admin包中将**spring-boot-devtools**暂时移除
成功运行!
- 感谢你赐予我前进的力量






