@levinzhang
2022-12-04T21:48:18.000000Z
字数 2504
阅读 361
by
VMware发布了Spring Framework 6和Spring Boot 3,这是Spring生态系统新一代的产品。Spring Framework 6需要Java 17和Jakarta EE 9。它还通过Micrometer嵌入了可观测性,支持跟踪和度量。Spring Boot 3需要Spring Framework 6。它内置支持通过GraalVM Native Image的静态预先(Ahead-of-Time,AOT)编译创建原生可执行文件。
VMware发布了人们期待已久的Spring Framework 6和Spring Boot 3。在Spring Framework 5发布五年之后,这些版本发布开启了Spring生态系统的新篇章。Spring Framework 6需要Java 17和Jakarta EE 9,并兼容最近发布的 Jakarta EE 10。它还通过Micrometer嵌入了可观测性,支持跟踪和度量。Spring Boot 3需要Spring Framework 6。它内置支持通过GraalVM Native Image的静态预先(Ahead-of-Time,AOT)编译创建原生可执行文件。
VMware的软件工程高级总监Michael Minella告诉InfoQ:
Spring采取的方法是让Spring开发者在现有的专业知识基础上获取原生编译的收益,而无需进行大量的变更,这在整个生态系统中是独一无二的。
VMware在SpringOne 2021会议上宣布了Spring Framework 6和Spring Boot 3。从2010年以来,这是Spring Framework第一次在上一个主发布版本两年后(2020年的5.3版本),而不是一年后发布更新。在最近的一次采访中,Java Champion和Spring开发人员倡导者Josh Long在讨论Spring Framework 6开发时间延长时表示:
“对于我们这些框架开发者来说,迁移至Jakarta EE是很有挑战性的”,“可观测性工作也涉及很多的地方”,“与GraalVM Native Image的预先(Ahead-of-Time,AOT)编译相关的工作[...]至少从2019年开始就以某种形式展开了”。
关于这两个版本相关内容的更多信息,请参见对Josh Long的采访。
支持Jakarta EE 10使得Spring Framework 6能够兼容最新的web服务器,比如Tomcat 10.1、Jetty 11和Undertow 2.3。Spring Framework 6还简化了HTTP请求,这是通过将它们定义在所谓的HTTP接口中实现的,它类似于Spring Data JPA通过资源库(repository)接口简化了数据库查询。借助RFC 7807问题详情,HTTP错误信息也会更有帮助。
作为一个预览特性,Spring Framework 6可以使用Java 19中来自Loom项目的虚拟线程。虚拟线程及其相关的结构化并发API简化了Java中的并发编程,使其运行更加高效。与Oracle不同,Spring认为虚拟线程是对反应式编程的补充,而不是要取代它。
在Spring Framework 6中值得注意的依赖升级包括Kotlin 1.7、Hibernate ORM 6.1、用于JSON和XML解析的Jackson 2.14以及用于反应式数据库访问的R2DBC 1.0。
正如InfoQ去年报道的那样,Spring Framework 6最初是计划包含对Java Platform Module System(JPMS)的支持的,但这从未实现过。对JPMS的支持进行了推迟:
Spring Framework 6.0强烈关注AOT和GraalVM原生镜像,以优化基于Spring的应用的部署。[...]今年以来,对它[模块支持]的需求非常少。[...]更深入的模块系统调整仍然是我们为Spring Framework 6.x所制定的长期技术战略的一部分。
OpenJDK的Leyden项目计划优化Java,并依赖于JPMS和jlink
连接工具。如果没有JPMS支持,Spring应用将无法使用这些优化。
Spring Boot 3的亮点是支持生成原生可执行文件。这些可执行文件启动更快,使用的内存更少,容器镜像更小,而且更安全。这使得Java在云中更有竞争力。Quarkus、Micronaut和Helidon这些框架使原生可执行文件在Java中流行了起来。InfoQ最近就这个话题发表了六篇系列文章。当开发人员的机器上安装了GraalVM Native Image编译器后,用Spring Boot 3创建一个原生可执行文件只需运行./mvnw -Pnative package
或./gradlew nativeCompile
即可。更多细节可以在参阅这篇博客文章。
Jakarta EE 9将Java命名空间从javax.*
改为jakarta.*
。如果现有的Spring和Spring Boot应用程序导入了Jakarta EE类型,如注解、校验或JPA,就需要对其进行修改。这就是为什么最近推出的Spring Boot Migrator项目正在“致力于从Spring Boot 2.7自动升级到Spring Boot 3.0”。
VMware缩短了Spring Framework 6的商业和开源支持期限。正如VMware的Spring Framework项目负责人Juergen Hoeller所说:
我们期望人们更快地升级到最新的6.x特性版本。
而Spring Boot 3.0的免费支持期限仍为一年。
VMware将在2023年1月24日至26日的虚拟SpringOne会议上讨论其新版本,SpringOne原计划于2022年12月举行线下的会议。
查看英文原文:Spring Boot 3 and Spring Framework 6 Use Java 17 and Jakarta EE 9, Support Native Java with GraalVM