为了用 Spring AI 2.0 升级 Spring Boot 4.0,我把依赖挨个验了一遍
📓 工坊日记
上一篇留了个悬念:Spring AI 2.0 绑死 Spring Boot 4.0,我生产环境还在 3.2.5,到底升不升?
光纠结没用。今天我干了一件事:把三个服务(认证中心、权限、易学)用到的依赖,挨个放到 Spring Boot 4.0 里实测,看看升级到底要动多少东西。
结论先放这:要改的比想象少,但坑比想象深。
为什么纠结
升级 Spring Boot 4.0 不是点一下版本号。它是 major 跨版本:
-
Spring Framework 6.1 → 7.0
-
Jakarta EE 10 → 11
-
一堆 starter 的 API 可能变
我之前手写 AI 调用,用的依赖就几个。但真正让我担心的,是MyBatis-Plus——数据库访问全靠它,一旦不兼容,整个后端都起不来。
第一个坑:MyBatis-Plus 3.5.7 直接崩
我把生产用的 mybatis-plus-spring-boot3-starter 3.5.7 放进 demo(已经是 Spring Boot 4.0.7),配了个 H2 内存库,加了个简单的 User 表和 Mapper。
编译通过,启动报错:
<span leaf="">Property <span>'sqlSessionFactory'</span> <span>or</span> <span>'sqlSessionTemplate'</span> are <span>required</span></span>
这个错误很迷惑人——看起来像是我忘了配 SqlSessionFactory。但我什么都没改,就是版本换成 4.0 了。
我开了 debug 模式看自动配置报告,找到了真凶:
<span leaf="">MybatisPlusAutoConfiguration:</span>
MyBatis-Plus 的自动配置靠@ConditionalOnSingleCandidate(DataSource)来匹配数据源,但 Spring Boot 4.0 里 Bean 的注册时机变了,它匹配不到了。匹配不到数据源,就不创建 SqlSessionFactory,Mapper 自然注入失败。
这个坑的关键是:MyBatis-Plus 3.5.7 的 spring-boot3-starter 是给 Spring Boot 3 写的,官方后来专门为 Spring Boot 4 出了mybatis-plus-spring-boot4-starter(3.5.13 起)。
换成它,3.5.17 版本,重新启动——HikariPool 正常、SqlSessionFactory 正常、插入查询一条数据全通过。
结论:MyBatis-Plus 必须换 starter + 升版本,这是升级路上最硬的一个依赖。
意外惊喜:springdoc 不用升级
第二个我担心的是 springdoc-openapi(接口文档,swagger)。生产用的是 2.3.0,我下意识以为要给 Spring Boot 4 升到 3.x。
放进 demo,启动,居然没崩。我访问了一下:
<span leaf="">/v3/api-docs → 返回正常 OpenAPI JSON</span>
springdoc-openapi 2.3.0 在 Spring Boot 4.0 下完全兼容,不用动。这个有点意外——它虽然是 2.x 系列,但兼容性做得比 MyBatis-Plus 好。
少一个要升级的依赖,省心。
又一个坑:aop 改名了
接着我把剩下的依赖批量加进去编译:security、validation、mail、aop、liquibase、mysql、jjwt。
编译报错:
<span leaf=""><span>'dependencies.dependency.version'</span> <span>for</span> spring-boot-starter-aop <span>is</span> missing</span>
version 缺失?这不像版本冲突,更像……依赖不存在。
我去翻了 Spring Boot 4.0 的 BOM,一看:spring-boot-starter-aop整个没了,改名成了spring-boot-starter-aspectj。
这是个很隐蔽的坑——不是不兼容,是名字直接变了。如果你不知道,升级时看到 “version missing” 会一头雾水。
改个名字,编译就过了。剩下 security、validation、mail、liquibase、mysql、jjwt 全部正常解析。
完整的升级清单
实测完,升级路径清晰了。要动的就三处,其余全兼容:
| 依赖
|
动作
MyBatis-Plus
| spring-boot3-starter 3.5.7
→ spring-boot4-starter 3.5.17
| |
spring-boot-starter-aop
|
改名 spring-boot-starter-aspectj
| |
wuxiannet-common(内部库)
|
同步改上面两项,bump 版本重新 deploy
|
不用动的:
-
springdoc-openapi 2.3.0 ✅
-
security / validation / mail / web starter ✅(版本 SB4 自动管理)
-
liquibase / mysql / jjwt / hutool / poi / lombok ✅(独立库)
总结
这一天的收获,不只是"知道要改什么",而是搞清楚了升级的边界:
升级 Spring Boot 4.0 的核心成本,不在依赖(大部分兼容),而在两个地方:
-
MyBatis-Plus 必须换专用 starter——这是唯一一个"硬不兼容"的第三方依赖,但官方有现成方案。
-
Spring Security 7.x 的 API 适配——依赖能解析,但代码里用了 Security 6.x 的老 API 的地方,得逐个改。这个我还没验,是下一个要啃的。
现在我可以拍板了:升级是可行的,代价可控。接下来就是动手,先把三个服务升上去,跑通,再开始写 AI 顾问。
下一篇,要么写升级的实操过程,要么开始搞 AI 顾问的后端。
每天早上8点软件工坊更新
- 原文作者:知识铺
- 原文链接:https://index.zshipu.com/geek/post/20260822/%E4%B8%BA%E4%BA%86%E7%94%A8-Spring-AI-2.0-%E5%8D%87%E7%BA%A7-Spring-Boot-4.0%E6%88%91%E6%8A%8A%E4%BE%9D%E8%B5%96%E6%8C%A8%E4%B8%AA%E9%AA%8C%E4%BA%86%E4%B8%80%E9%81%8D/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。
- 免责声明:本页面内容均来源于站内编辑发布,部分信息来源互联网,并不意味着本站赞同其观点或者证实其内容的真实性,如涉及版权等问题,请立即联系客服进行更改或删除,保证您的合法权益。转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。也可以邮件至 sblig@126.com