9.8 KiB
JeecgBoot 3.9.3 升级日志
发布日期:2026-07-07
概述
本次升级聚焦于基础设施现代化,将核心框架从 Spring Boot 3 迁移至 Spring Boot 4,同步升级 Spring Cloud、XXL-JOB、Nacos、Shiro、Sentinel 等关键组件,全面提升平台的技术栈基线。
一、Spring Boot 3 → 4 升级(3.5.5 → 4.1.0)
1.1 框架版本
| 组件 | 旧版本 | 新版本 |
|---|---|---|
| Spring Boot | 3.5.5 | 4.1.0 |
| Spring Framework | 6.x | 7.0 |
| Spring Cloud | 2024.x | 2025.1.2 |
| Spring Cloud Alibaba | 2024.x | 2025.1.0.0 |
1.2 兼容性修复
Jackson 3 迁移
Spring Boot 4 使用 Jackson 3(tools.jackson),替代 Jackson 2(com.fasterxml.jackson)。移除 jackson-module-kotlin(Jackson 2 专有,与 Jackson 3 不兼容,会导致 ClassCastException)。
<!-- jeecg-boot-base-core/pom.xml -->
<!-- 注释掉 jackson-module-kotlin,Jackson 2 与 Jackson 3 不兼容 -->
<!-- <dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
</dependency> -->
UriComponentsBuilder API 变更
Spring Framework 7 移除了 UriComponentsBuilder.fromHttpUrl(),改用 fromUriString():
// OpenApiController.java
// 旧: UriComponentsBuilder.fromHttpUrl(url)
// 新: UriComponentsBuilder.fromUriString(url)
UriComponentsBuilder builder = UriComponentsBuilder.fromUriString(url);
RedisMessageListenerContainer Bean 冲突
Spring Boot 4.1 自动创建 redisMessageListenerContainer,与 JeecgBoot 自定义的 redisContainer 冲突,DragWebSocket 注入时出现二义性。
修复方案:新增 RedisContainerPrimaryConfig,通过 BeanDefinitionRegistryPostProcessor 将 redisContainer 标记为 @Primary:
@Component
public class RedisContainerPrimaryConfig implements BeanDefinitionRegistryPostProcessor {
@Override
public void postProcessBeanDefinitionRegistry(BeanDefinitionRegistry registry) {
if (registry.containsBeanDefinition("redisContainer")) {
registry.getBeanDefinition("redisContainer").setPrimary(true);
}
}
}
1.3 其他适配
- Shiro 配置适配 Spring Framework 7 API 变更
- Druid 配置适配新版本 Spring Boot 自动装配
- Swagger3 / Knife4j 配置适配 Spring Boot 4
- 单元测试框架适配
二、XXL-JOB 2.4.1 → 3.4.2 升级
2.1 升级内容
| 组件 | 旧版本 | 新版本 | 说明 |
|---|---|---|---|
| xxl-job-core | 2.4.1 | 3.4.2 | 核心调度引擎 |
| xxl-sso-core | — | 2.4.0 | 新增,3.x 管理平台登录认证 |
| xxl-tool | — | 2.5.0 | 工具库 |
| mybatis-spring-boot-starter | 3.0.3 | 4.0.1 | MyBatis 适配 Spring Boot 4 |
2.2 主要变更
源码结构重组
- 管理平台 controller 从
com.xxl.job.admin.controller迁移到com.xxl.job.admin.business.controller - 调度器从
com.xxl.job.admin.core.scheduler迁移到com.xxl.job.admin.business.scheduler - model/mapper 从
core迁移到business包
API 迁移:ReturnT → Response
XXL-JOB 3.x 全面使用 Response<T> 替代 ReturnT<T>:
// 旧
ReturnT<String> execute(String param) { return ReturnT.SUCCESS; }
// 新
Response<String> execute(String param) { return Response.SUCCESS; }
认证方式变更
- 2.x:数据库
xxl_job_user表 MD5 密码 - 3.x:
xxl-sso单点登录框架,SHA-256 密码,默认账号admin/123456
执行器注册机制
- 3.x 引入了新的执行器注册和发现机制
JeecgXxlJobSpringExecutor做了适配以支持@Bean方法上的@XxlJob注解扫描
配置文件格式
- application.yml → application.properties(解决
xxl-sso.token.key等带点号/横线的 key 解析问题)
数据库
- 新数据库名
xxl-job3,表结构变化需重新导入db/tables_xxl_job.sql
2.3 保留的 JeecgBoot 定制
XxlJobAdminApplication启动日志jeecg.xxljob配置前缀支持- 邮件告警配置集成 JeecgBoot 邮件配置
- Nacos 服务发现适配
三、Nacos 2.3.2 → 3.2.2 升级
3.1 升级策略
使用重新打包的 Nacos 3.2.2,解决官方 Nacos 依赖兼容性问题。
去掉 pom 中 springboot3 命名空间:Nacos 模块不再继承 jeecg-boot-parent(org.jeecgframework.boot3),改为直接以 spring-boot-starter-parent 4.1.0 为 parent,退出主项目的 springboot3 版本体系,独立管理依赖。
3.2 启动模式
从单阶段启动改为三阶段启动:
// 阶段1: Core Context(无 Web)
NacosServerBasicApplication → coreContext
// 阶段2: Server Web Context
NacosServerWebApplication → parent(coreContext)
// 阶段3: Console Context
NacosConsole → parent(coreContext)
启动类:JeecgNacosApplication
3.3 依赖管理
Hessian 版本统一
Nacos 3.x 多个依赖引入不同版本 Hessian(com.caucho.hessian、com.alipay.sofa.hessian),存在 API 冲突。排除所有传递 Hessian,统一使用 com.caucho:hessian:4.0.66。
<!-- Nacos Server、Console、JRaft 均需排除 hessian 传递依赖 -->
3.4 配置变更
application.yml→application.properties- 数据库名:
nacos(新库,建表脚本db/tables_nacos.sql) - 控制台端口:
18080,上下文路径:/nacos - 部署模式:
merged(三合一) - 关闭 AI 扩展和广告开关
- 新增
logback-spring.xml - 删除 springboot3/springboot2 命名空间切换规则:不再支持 springboot2,新库默认只提供 springboot3/4 的配置
3.5 JVM 参数
--add-opens java.base/java.lang=ALL-UNNAMED
--add-opens java.base/java.lang.reflect=ALL-UNNAMED
--add-opens java.base/java.util=ALL-UNNAMED
--add-opens java.base/java.io=ALL-UNNAMED
四、其他组件升级
| 组件 | 旧版本 | 新版本 | 说明 |
|---|---|---|---|
| MyBatis-Plus | 3.5.14 | 3.5.16 | ORM 框架 |
| Druid | — | 1.2.28 | 数据库连接池 |
| JSqlParser | — | 5.0 | SQL 解析器 |
| Shiro | < 2.0 | 3.0.0 | 安全框架 |
| shiro-redis | — | 4.1.0 | Shiro Redis 支持(切换到 io.github.weir2010) |
| Sentinel Dashboard | 1.8.3 | 1.8.10 | 流量控制(支持 JDK17) |
4.1 新增 jeecg-boot-starter-sentinel(按需引入)
⚠️ 不兼容变更:旧版 Sentinel 功能内置在 starter-cloud 中自动生效,新版改为按需引入,必须显式添加
jeecg-boot-starter-sentinel依赖后才能使用 Sentinel 限流熔断功能。
本次封装了独立的 jeecg-boot-starter-sentinel 模块,将 Sentinel 限流降级能力抽离为公共 starter,与 starter-cloud 解耦。
模块结构:
jeecg-boot-starter-sentinel/
├── JeecgSentinelAutoConfiguration.java # 自动配置(注册 Bean)
├── handler/
│ └── JeecgUrlBlockHandler.java # 限流降级处理器(HTTP 429)
├── parser/
│ └── JeecgHeaderRequestOriginParser.java # 请求来源解析器(IP/参数)
└── feign/
├── JeecgSentinelFeign.java # 自定义 Feign Builder
└── JeecgSentinelInvocationHandler.java # Feign 调用拦截处理器
功能要点:
- Feign 熔断:支持
@FeignClient的fallback/fallbackFactory自动注入 - 限流降级响应:被 Sentinel 限流时返回 HTTP 429 + 统一 JSON
- 请求来源解析:基于请求参数
origin或X-Forwarded-For头 - 与
starter-cloud解耦,按需引入
<dependency>
<groupId>org.jeecgframework.boot3</groupId>
<artifactId>jeecg-boot-starter-sentinel</artifactId>
</dependency>
五、数据库变更
| 数据库 | 说明 |
|---|---|
xxl-job3 |
XXL-JOB 3.4.2 新库,需导入 db/tables_xxl_job.sql |
nacos |
Nacos 3.2.2 新库,建表脚本 db/tables_nacos.sql(附 Nacos 3.x conf/mysql-schema.sql) |
⚠️ Nacos 3.x 不会自动建表,需要手动执行建表脚本。
六、⚠️ 不兼容升级提醒
Nacos 和 XXL-JOB 需要重新初始化数据库!
- Nacos 2.x → 3.x、XXL-JOB 2.x → 3.x 均为大版本升级,表结构不兼容,需用新库重新建表
- 升级前请备份老库,然后将老库中的配置(Nacos 配置项、XXL-JOB 任务等)手工迁移到新库
- 建表脚本:
- Nacos:
db/tables_nacos.sql - XXL-JOB:
db/tables_xxl_job.sql
- Nacos:
访问地址变更
| 服务 | 旧地址 | 新地址 |
|---|---|---|
| Nacos 控制台 | http://localhost:8848/nacos |
http://localhost:18080/nacos |
| XXL-JOB 管理 | http://localhost:9080/xxl-job-admin |
http://localhost:9080/ |
Nacos 端口从 8848 改为 18080;XXL-JOB 去掉了
/xxl-job-admin项目后缀。
七、升级注意事项
- Java 版本:仍需 Java 17+,Spring Boot 4 同时支持 Java 17/21/24
- XXL-JOB 执行器:确保
jeecg-boot-starter-job模块排除旧版xxl-job-core,统一使用 3.4.2 - Nacos:初次启动前需手动导入数据库表,三阶段启动完成后访问
http://localhost:18080/nacos - Spring Boot 4:注意
jakarta命名空间(无变化,3.x 已采用);Jackson 3 替代 Jackson 2 - 线上部署:微服务模块的 Dockerfile 中 jar 包名已更新为
3.9.3 - IDE 编码:项目使用 Tab 缩进,properties/YAML 文件使用 UTF-8 编码
八、版本号对照
JeecgBoot: 3.9.2 → 3.9.3
Spring Boot: 3.5.5 → 4.1.0
Spring Cloud: 2024.x → 2025.1.2
SC Alibaba: 2024.x → 2025.1.0.0
XXL-JOB: 2.4.1 → 3.4.2
Nacos Server: 2.3.2 → 3.2.2
Shiro: <2.0 → 3.0.0
shiro-redis: — → 4.1.0
MyBatis-Plus: 3.5.14 → 3.5.16
MyBatis-Starter: 3.0.3 → 4.0.1
Druid: — → 1.2.28
JSqlParser: — → 5.0
Sentinel: 1.8.3 → 1.8.10