感谢以下作者对本文内容的贡献:袁沼、王德冲、刘鹏浩、李洋、邱戈川
项目简介
在 AI 技术加速落地企业场景的 2025 年,UU 跑腿启动了从传统云原生向“AI 云原生”架构跃迁的战略升级。面对 JDK 17 与 Spring 6 大规模迁移带来的工程复杂性,团队不仅完成了 Java 应用全栈的技术底座重构,更通过引入通义灵码驱动的“灵码编程”新模式,实现了架构升级的智能化、自动化突破。
借助通义灵码的 AI 智能体能力,开发人员仅需定义清晰的 Prompt 提示词,即可由系统自主完成从分支创建、代码修改、依赖更新到提交合并的全流程操作。相比传统人工升级动辄数小时的高成本投入,AI 智能体将单项目升级时间压缩至几分钟级别,并支持并行处理,显著提升了大规模系统演进的效率与准确性。这一模式有效规避了版本冲突、遗漏配置等常见问题,真正实现了“一次成功、零人工干预”的工程级变更。
这不仅是技术栈的升级,更是研发范式的变革—通义灵码作为 AI 时代开发者的核心助手,正在重新定义编码效率与软件演进方式,成为企业构建 AI 原生应用不可或缺的智能引擎。
本文目录
- AI 原生应用架构技术底座跃迁
- Java 应用全栈升级避坑与最佳实践
- JDK 17 基线升级的技术影响
- Spring 5 到 6 的“地基重铸”
- 灵码编程(AI 智能体高效驱动架构转型)
- 总结
AI 原生应用架构技术底座跃迁
2025 年被视为 AI 技术实现规模化落地的关键年份,UU 跑腿正致力于打造新一代智能应用,以全新的服务体验满足用户需求。在技术架构层面,我们正从传统的云原生架构向 AI 云原生架构演进,目标是实现以高代码开发为特征的 AI 原生应用在企业级场景的全面落地。
第一阶段: 基础设施统一与标准化
- 基线升级:将现有约 90% JDK11 环境的应用全面升级至 JDK 17
- 标准化治理体系:构建覆盖开发、构建、生产环境的标准化 JDK 治理,确保业务无感迁移
第二阶段: 框架演进与 AI 能力集成
- Spring 生态升级:完成 Spring 框架大版本迁移,充分利用新版本在性能
- AI 框架落地:引入并深度集成新一代 AI 开发框架,构建统一的 AI 能力底座
价值驱动:
为了支撑业务发展阶段对后端性能与稳定性的高要求,UU 跑腿采用开源与自研双轮驱动,致力于构建一个标准化技术体系,确保工程的可控、可验证性。系统性解决了 JDK 与 Spring 微服务框架底层暴露的各类问题,在成本、稳定性与标准化方面取得显著成效。
- 稳定性收益:高版本 JDK 修复 GC/JIT 核心缺陷;Spring 6 修复 CVE-2024-38819 等高危漏洞,消除系统性风险。
- AI 原生能力建设:集成 Spring AI 技术栈,为业务系统注入智能能力,积极探索向“AI 原生”架构演进的可行路径。
- 多维成本收益:相同请求内存/CPU 需求降低支撑集群缩容退机,实现直接成本节约;优化资源画像,未来新增业务资源需求显著降低。
- 技术演进收益:落地新一代主流微服务框架(Spring Boot 3.x/Triple)。
- 运维标准化收益:统一 JDK 版本与使用规范,降低安全运维复杂度。
Java 应用全栈升级避坑与最佳实践
根据《TIOBE 编程语言排行》2025 年 10 月报告,Python、C/C++ 与 Java 依然稳居前列。Java 凭借其成熟的生态系统,在企业级后端架构与大数据处理中持续发挥关键作用,也是 UU 跑腿技术体系的核心支撑。
在智能体开发兴起初期,Python 凭借其在 AI 领域的主导地位成为主流。但随着智能体技术从概念验证走向企业级部署,开发框架与工具生态正加速扩展至更多语言。2025 年 6 月,国内开源的 Spring AI Alibaba 框架正式发布,同步升级 AI 网关与 Nacos 3,标志着 Java 生态系统已全面拥抱 AI 技术,为企业级 AI 应用提供了成熟的底层支持。UU 跑腿深度连接生态,技术赋能业务。
JDK 17 基线升级的技术影响
OpenJDK 季度漏洞更新,UU 跑腿完成全部 JDK 11 应用的安全加固,根除隐患如:JVM TI 存在已知 Crash 问题,可能导致应用崩溃。(https://bugs.openjdk.org/browse/JDK-8283849)
随着 AI 时代到来,主流 Java AI SDK 的最低支持版本已提升至 JDK 17。
JDK 17 已成为当前最主流的长期支持(LTS)版本,获得社区和厂商的广泛支持。New Relic《2024 年 Java 生态系统状况报告》,全球约 35% 的 Java 应用已迁移至 JDK 17,年增长率近 300%。
统一技术底座
UU 跑腿将 90% JDK11 环境的应用全面升级至 JDK 17,构建覆盖开发、构建、生产环境标准化治理体系。
构建由 Maven 3.8+ 与 JDK 17.0.15+ 组成的配套,Maven3.8+版本支持后续spring6 升级,全面支持各应用环境对 JDK 11 的灵活切换,并通过全链路压测与兼容性评估,确保业务平滑迁移与运维安全。
- 统一内部使用的 JDK17 镜像,推荐国内成熟的 dragonwell,含完整版 - alinux ;也可以选择轻量级 - alpine(更适配云原生;需额外系统组件:如字体库);
FROM dragonwell:17.0.15-alinux
- JDK17:通过环境变量添加 --add-opens 配置,默认安全性校验异常:
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.alibaba.com.caucho.hessian.io.JavaDeserializer (jar:file:/app.jar!/BOOT-INF/lib/dubbo-3.1.11.jar!/) to field java.math.BigInteger.signum
WARNING: Please consider reporting this to the maintainers of com.alibaba.com.caucho.hessian.io.JavaDeserializer
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
JDK17 必须加上如下配置:
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
-
Lombok 版本升级到 1.18.26,支持 JDK17;可参考 Lombok 官方变更日志 [ 1] 了解;
-
同时将 MapStruct 版本升级到 1.5.5.Final,可参考 MapStruct 官方变更日志 [ 2] 了解;
-
减少外部依赖:使用 JDK 原生特性(如
var
局部变量类型推断)替代 Lombok,以简化技术栈并增强代码可维护性。
稳定性&性能提升
ZGC 核心原理详细介绍参考:https://wiki.openjdk.org/display/zgc
Spring6 版本强制跃迁,最低要求 Java 17,强制适配 Java 新特性(密封类、record 类型、模式匹配、虚拟线程等),既提升代码简洁性与安全性,又能享受 JVM 底层优化(如 ZGC 低延迟垃圾回收、Vector API 性能加速)。
UU 跑腿后端通过将 JDK 从 11 升级至 17,不仅修复了 GC、JIT 等核心组件的已知缺陷,还借助 ZGC 等 JVM 底层优化,在几乎无需代码改动的情况下,实现约 10% 的系统性能提升。
Spring 5 到 6 的“地基重铸”
随着 Spring AI 1.0 正式版本 2025 年 5 月发布,标志着 Spring 生态系统全面拥抱人工智能技术,基于 Spring AI Alibaba 框架构建 AI 原生架构底座。
UU 跑腿本次从 Spring 5 到 Spring 6 的升级是一次重大的技术升级,带来了显著的性能提升、功能增强和安全性改进。虽然升级过程可能面临一些兼容性挑战,逐步适配云原生终极形态。但从长远来看,升级到 Spring 6 将为项目带来更好的可维护性、性能和安全性。
新增 Spring AI 原生集成,支持主流大模型,切换模型仅需修改配置,无需改动业务代码。内置 Prompt 模板、向量数据库集成(Redis、Milvus 等)、AI 响应解析等能力,快速落地 RAG(检索增强生成)、智能问答等场景。
"这是一个关于‘命名权’的故事。以前,Java EE 由 Oracle 管理,包名是 javax.*
。后来,Eclipse 基金会接管,并重命名为 Jakarta EE。为了避免法律纠纷,包名也必须从 javax
改为 jakarta
。"
Spring 5 → Spring 6 核心第三方组件 Maven 版本矩阵
注:后续需及时更新依赖版本,确保安全无风险。
落地新一代主流 Java 开发框架(Spring Boot 3.x);Springboot3 一键简化原生镜像打包流程,完美适配云原生、Serverless 等对资源效率和启动速度要求极高的场景。
灵码编程(AI 智能体高效驱动架构转型)
架构升级挑战:在完成 Spring 6 与 JDK 17 的架构转型及兼容性调整后,UU 跑腿后续对存量应用的改造仍面临工程复杂度高、易遗漏等挑战。
统一构建升级方案,通过 AI 智能体驱动,开发人员只需首次定义 Prompt 提示词,结合规则描述,通过编程智能体进行工程级变更,可以自主决策,自动完成命令编写并运行终端,可以实现代码自动生成的全流程自动化:生成对应代码、创建分支、提交代码。实现 Java 应用 Java 17 + Spring6 +Triplex 技术栈全栈智能化升级,大幅提升编码任务的执行效率。
人工升级 vs AI 智能体驱动升级
前提条件
- 基于 IDEA + 通义灵码
- 开通「智能编码助手通义灵码」服务
- 在 IDEA 开发工具中安装并配置「Lingma 插件」(参考下图指引)
编程智能体简介
- 工程级变更:可根据开发者的任务描述,自主进行任务拆解和工程内多个代码文件修改,同时可通过多次对话进行逐步迭代或快照回滚,与通义灵码协同完成编码任务。
- 工程自动感知:根据开发者的任务描述,可自动感知工程框架、技术栈、所需代码文件、错误信息等工程内信息,无需手动添加工程上下文,任务描述更轻松。
- 工具使用:可自主使用十多种内置编程工具,例如读写文件、代码查询、错误排查等。同时,支持自动感知和使用 MCP 工具。
- 终端命令执行:在执行编码任务时,可以自主决策需要执行的命令,自动完成命令编写并运行终端,大幅提升编码任务的执行效率。
Prompt 提示词
“基于 master 创建 feature-spring 分支,并按照规则文件将项目从 Spring 5 迁移到 Spring 6”。
创建开发分支,自主完成 spring 框架版本升级。
最后代码检查清单检查:覆盖版本、完整性,确保升级规则无遗漏。
Spring 5 升级到 Spring 6 规则
1. 核心原则
在升级 Spring 5 到 Spring 6 时,必须遵循以下规则进行代码修改:
2. 适用文件范围
本规则仅适用于以下类型的文件:
- Java 源文件(.java)
- YAML 配置文件(.yml)
- Maven 配置文件(pom.xml)
- Docker 配置文件(Dockerfile)
除上述文件类型外,其他文件类型不应应用以下规则。
3. 父 POM 版本和 JDK17 升级
3.1 framework-parent 插件更新
<!-- 替换前 --><groupId>com.framework</groupId><artifactId>framework-parent</artifactId><version>原版本号</version><!-- 替换后 --><groupId>com.framework</groupId><artifactId>framework-parent</artifactId><version>3.4.18</version>
3.2 JDK17 镜像升级
Dockerfile 文件中 FROM JDK 镜像统一替换为:
FROM dragonwell:17.0.15.0.16.6-standard-ga-alinux
3.3 开启 JDK 模块权限
在 Dockerfile 文件中 ENV JAVA_OPTS 环境变量增加以下参数:
--add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.lang.reflect=ALL-UNNAMED --add-opens java.base/java.lang.invoke=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED --add-opens java.base/java.math=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.text=ALL-UNNAMED --add-opens java.base/java.time=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED --add-opens java.base/java.util.concurrent.locks=ALL-UNNAMED --add-opens java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens java.base/jdk.internal.misc=ALL-UNNAMED
3.4 JDK17 compiler 编译 properties 设置为 17
<!-- 替换前 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>原版本号</version><!-- 替换后 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version>
3.5 spring-boot-maven-plugin 版本号更新
<!-- 替换前 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>原版本号</version><!-- 替换后 --><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version>
org.springframework.boot spring-boot-maven-plugin 2.7.3
4. Maven 依赖修改
4.1 Smart Doc 插件更新
<!-- 替换前 --><groupId>com.github.shalousun</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>2.3.7</version><!-- 替换后 --><groupId>com.ly.smart-doc</groupId><artifactId>smart-doc-maven-plugin</artifactId><version>3.1.2</version>
5. SpringBoot 和 application.yml
模块配置
对于以 -provider
后缀的 maven 模块项目,在 application.yml
文件中,需要在JAVA.Common.Dubbo3
前增加 JAVA.Common.Triple
:
启动类上 @SpringBootApplication 注解中删除无效配置
5.1 删除 exclude 中的 RedissonCacheStatisticsAutoConfiguration.class
- 删除
RedissonCacheStatisticsAutoConfiguration.class
从@SpringBootApplication
的 exclude 列表中 - 删除启动类上的包引用:
import org.redisson.spring.cache.RedissonCacheStatisticsAutoConfiguration;
5.2 删除 exclude 中的 RedissonAutoConfiguration.class
- 删除
RedissonAutoConfiguration.class
从@SpringBootApplication
的 exclude 列表中
6. 注解修改规则
6.1 Lombok RequiredArgsConstructor
// 替换前@RequiredArgsConstructor(onConstructor = @_(@Autowired))// 替换后@RequiredArgsConstructor(onConstructor_ = @Autowired)
6.2 移除 @DubboService 注解的 protocol 属性
// 替换前@DubboService(protocol = {CommonConstants.DUBBO, "rest"})
移除@DubboService注解的 protocol = {CommonConstants.DUBBO, "rest"}
配置。
7. Import 语句变更规则
7.1 Validation相关
// 替换前import javax.validation.*;// 替换后import jakarta.validation.*;
7.2 Annotation 相关
// 替换前import javax.annotation.*;// 替换后import jakarta.annotation.*;
7.3 Servlet 相关
// 替换前import javax.servlet.*;// 替换后import jakarta.servlet.*;
7.4 替换 org.checkerframework.checker.nullness.qual.NonNull包名
// 替换前import org.checkerframework.checker.nullness.qual.NonNull;// 替换后import org.springframework.lang.NonNull;
7.5 JAX-RS 相关(保留不变)
// 以下JAX-RS注解保持不变import javax.ws.rs.*;import javax.ws.rs.core.*;
7.6 检查移除 facade 目录 import 无效的包名引用
// 删除以下无效或已废弃的包名引用import org.apache.dubbo.common.constants.CommonConstants;
7.7 org.apache.dubbo.rpc.protocol.rest.support.ContentType 替换
// 替换前import org.apache.dubbo.rpc.protocol.rest.support.ContentType;// 替换后import com.uupt.framework.triple.jaxrs.config.ContentType;
8. 代码检查清单
在提交代码前,确保:
- 更新了父 POM 版本为
3.4.18
- 所有
javax.*
import 已替换为jakarta.*
(注意:JAX-RS 相关注解javax.ws.rs.*
保持不变) - 移除了
RedissonCacheStatisticsAutoConfiguration.class
- 将
RedissonAutoConfiguration.class
替换为RedissonAutoConfigurationV2.class
- 在 -provider 模块的 application.yml 中添加了
JAVA.Common.Triple
配置 - 更新了 Smart Doc 插件版本
- 将
framework-dubbo-web
依赖替换为framework-triple-jaxrs
- 移除了
lombok.var
和org.jetbrains.annotations.NotNull
import - 将
@RequiredArgsConstructor(onConstructor = @_(@Autowired))
替换为@RequiredArgsConstructor(onConstructor_ = @Autowired)
- 将
org.apache.dubbo.rpc.protocol.rest.support.ContentType
替换为com.uupt.framework.triple.jaxrs.config.ContentType
- 移除了
@DubboService
注解中的protocol = {CommonConstants.DUBBO, "rest"}
配置,仅保留version
和validation
属性
总结
- Spring 6 必须运行于 JDK 17+ 环境,JDK 17 成为 AI 开发最低版本要求
- 核心服务完成 JDK 17 升级,性能提升 10%;JDK 安全加固,修复 GC/JIT 漏洞,引入 ZGC 提升稳定性;JDK 25 LTS 发布,GraalVM 原生镜像优化,启动速度大幅提升
- 演进策略,先解决兼容性问题,再优化 API 适配,采用渐进式升级,确保业务平稳过渡
- 灵码编程:开发人员的超级助手,规范提示词格式,提升 AI 交互效率
相关链接:
[1] Lombok 官方变更日志
https://projectlombok.org/changelog
[2] MapStruct 官方变更日志
https://mapstruct.org/news/