Java 生态周报:GraalVM 加速发布、Spring AI 2.0 推进、Quarkus MCP Agent 登场

2026-05-11 19 预计阅读时间:1 分钟
来源:infoq.com AI 摘要 原文链接

免责声明:本文为 AI 摘要整理,建议结合原文阅读。摘要可能省略上下文、版本差异或边界条件,不作为官方说明。

预计阅读时间:8 分钟

2026 年 5 月初的 Java 生态相当热闹——从 JDK 27 的 JEP 提案到 GraalVM 发布节奏提速,再到 Spring AI 2.0 第六个里程碑和全新的 Quarkus Agent MCP Server,多条线路同时推进。下面挑几条对日常开发影响最大的变化展开聊聊。

JDK 27:JEP 提案落地,关注点在哪

OpenJDK 本周公布了面向 JDK 27 的 JEP 目标清单。虽然 JDK 27 还在早期阶段,但几个提案方向值得提前留意:

  • 结构化并发(Structured Concurrency) 的持续演进——从孵化到正式 API 的路径越来越清晰,对写异步服务的人来说是件大事。
  • 值类型(Value Classes) 相关提案的推进,直接影响集合框架和内存布局的未来形态。

如果你还在用 JDK 21/23 做生产部署,现在就可以在测试环境里试用这些孵化 API,提前感受 API 风格的变化,别等到正式发布才手忙脚乱。

GraalVM:发布节奏提速意味着什么

GraalVM 宣布加速发布火车——从过去的节奏缩短到更频繁的版本交付。这对用 GraalVM Native Image 做云原生部署的团队影响最直接:

  1. Bug 修复更快落地——过去 Native Image 的一些边缘问题可能要等大版本才修,现在周期缩短。
  2. 新 JDK 特性适配更及时——JDK 25/26 的语言特性在 Native Image 上的支持窗口变短。
  3. CI/CD 管线需要跟上——更频繁的 GraalVM 版本意味着你的 native-image 构建脚本要定期验证兼容性。

实操建议:在 CI 里固定 GraalVM 版本号,同时设一个定期(比如每月)的"版本升级"流水线任务,自动拉最新版跑一遍 native 构建测试。

# 在 CI 中固定 GraalVM 版本,避免意外升级导致构建失败
export GRAALVM_HOME="$HOME/.graalvm/graalvm-jdk-25_25.0.2"
# 升级验证流水线:拉最新版并跑 native 构建
gu install native-image
mvn -Pnative package -DskipTests
# 构建成功后跑集成测试
./target/myapp --server.port=8081 &
curl -sf http://localhost:8081/actuator/health || exit 1
kill %1

Spring AI 2.0 M6:离正式版越来越近

Spring AI 2.0 已经到了第六个里程碑,API 稳定性明显提升。几个关键变化:

  • ChatClient 的流式响应 API 更加完善,Flux<String> 的用法和生产级错误处理基本定型。
  • Tool/Function Calling 的注册方式从手动配置转向自动扫描,和 Spring Boot 的 auto-configuration 体系对齐。
  • 多模型切换 的抽象层更成熟,同一个 ChatClient 可以在 OpenAI、Azure OpenAI、Ollama 之间零代码切换。

下面是一个可以直接跑的 Spring AI 2.0 M6 示例——用 Ollama 本地模型做简单问答:

# application.yml — Spring AI 2.0 M6 + Ollama 本地模型
spring:
  ai:
    ollama:
      base-url: http://localhost:11434
      chat:
        model: llama3.2
        options:
          temperature: 0.7
// ChatController.java — 最简问答端点
@RestController
@RequestMapping("/chat")
public class ChatController {

    private final ChatClient chatClient;

    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping
    public String ask(@RequestParam String question) {
        return chatClient.prompt()
                .user(question)
                .call()
                .content();
    }

    // 流式响应端点,适合前端逐字渲染
    @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> stream(@RequestParam String question) {
        return chatClient.prompt()
                .user(question)
                .stream()
                .content();
    }
}

运行前确保本地 Ollama 已启动并拉取了模型:

# 启动 Ollama 并拉取模型
ollama serve
ollama pull llama3.2

# 启动 Spring Boot 应用
mvn spring-boot:run

# 测试
curl "http://localhost:8080/chat?question=Java%20值类型%20和%20普通类%20有什么区别"

Quarkus Agent MCP Server:让 AI Agent 有标准接口

本周最引人注目的新项目是 Quarkus Agent MCP Server——基于 Model Context Protocol(MCP)规范,让 Quarkus 应用能直接暴露 Agent 工具给外部 AI 客户端调用。

MCP 的核心思路很简单:AI 模型不直接操作你的系统,而是通过一个标准协议调用你注册的"工具"(tool),每个工具声明自己的输入 schema 和输出格式。Quarkus Agent MCP Server 把这套协议搬进了 Java 生态,用 Quarkus 的扩展机制做工具注册。

一个最小 MCP Tool 示例:

// McpTools.java — 在 Quarkus 中注册一个 MCP 工具
@McpTool(name = "query_order", description = "根据订单 ID 查询订单状态")
public class OrderQueryTool {

    @Inject
    OrderService orderService;

    @ToolOperation
    public ToolResult query(@ToolParam(name = "orderId", description = "订单 ID") String orderId) {
        Order order = orderService.findById(orderId);
        if (order == null) {
            return ToolResult.error("订单不存在: " + orderId);
        }
        return ToolResult.success(Map.of(
            "orderId", order.getId(),
            "status", order.getStatus().name(),
            "total", order.getTotal()
        ));
    }
}
# 添加 Quarkus MCP Agent 扩展
quarkus extension add quarkus-agent-mcp-server

# 开发模式启动
mvn quarkus:dev

# MCP Server 默认暴露 SSE 端点,AI 客户端可连接
# 端点地址:http://localhost:8080/mcp/sse

这个方向的意义在于:你的业务系统不需要自己集成大模型 SDK,只需要按 MCP 规范暴露工具,任何支持 MCP 的客户端(Claude Desktop、IDE 插件、自建 Agent)都能直接调用。职责边界清晰,安全审计也更容易做。

其他版本更新速览

项目 版本 要点
Grails 8.0-M1 基于 Spring Boot 3.x,Groovy 5.x 兼容,框架现代化第一步
Groovy 6.0-alpha1 对齐 JDK 25+ 特性,语法层面开始支持值类型前缀
JobRunr 点版本 修复后台任务调度在集群模式下的竞态条件
GlassFish 维护版本 Jakarta EE 11 兼容性补丁
Tomcat / TomEE 维护版本 安全修复和 HTTP/2 小改进

Grails 8.0 和 Groovy 6.0 都是早期版本,不建议上生产,但如果你维护老项目,现在就该在分支上跑一遍兼容性测试。

采纳建议清单

  • GraalVM 用户:立即在 CI 里固定版本号,设立月度升级验证流水线。
  • Spring AI 用户:M6 可以开始做功能验证了,但别用于生产——API 还可能微调。重点试 ChatClient 流式接口和 Tool Calling。
  • Quarkus 用户:如果你在做 AI Agent 相关项目,Quarkus Agent MCP Server 值得现在就 fork 一份跑 demo,理解 MCP 协议的交互模式。
  • Grails/Groovy 老项目:用 8.0-M1 / 6.0-alpha1 做兼容性探测,记录哪些语法或依赖需要改,正式版出来时能快速跟进。
  • JDK 关注者:在 JDK 23+ 测试环境里试用结构化并发和值类型孵化 API,写点小实验代码,提前建立手感。

相关推荐