📓 工坊日记

     上一篇留了个悬念: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&nbsp;<span>'sqlSessionFactory'</span>&nbsp;<span>or</span>&nbsp;<span>'sqlSessionTemplate'</span>&nbsp;are&nbsp;<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 &nbsp; &nbsp; &nbsp;→ 返回正常 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>&nbsp;<span>for</span>&nbsp;spring-boot-starter-aop&nbsp;<span>is</span>&nbsp;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 的核心成本,不在依赖(大部分兼容),而在两个地方:

  1. MyBatis-Plus 必须换专用 starter——这是唯一一个"硬不兼容"的第三方依赖,但官方有现成方案。

  2. Spring Security 7.x 的 API 适配——依赖能解析,但代码里用了 Security 6.x 的老 API 的地方,得逐个改。这个我还没验,是下一个要啃的。

现在我可以拍板了:升级是可行的,代价可控。接下来就是动手,先把三个服务升上去,跑通,再开始写 AI 顾问。

下一篇,要么写升级的实操过程,要么开始搞 AI 顾问的后端。


每天早上8点软件工坊更新