Juergen Hoeller 在 SpringOne 大会分享最新 Spring 5.0 发展蓝图:提供对 Reactive 支持

阅读数:2597 2016 年 8 月 14 日

话题:Java语言 & 开发

在拉斯维加斯举行的 SpringOne Platform 大会的第二日,Pivotal 公司首席工程师兼 Spring 框架项目负责人 Juergen Hoeller 给与会者分享了 Spring 框架的最新发展蓝图。

Spring 4.0 Pivotal 框架缩短了迭代期,大约会在每 9-10 个月进行一次主要功能发布。4.3 版本已经在今年七月发布,预计该版本将成为 Spring 4.x 产品线的最终功能版本。该版本中进行了对于核心依赖注入框架本身的进一步改进,以及对于 Spring MVC 和网络层的改进。由于系统需求没有变更,因此该版本与 JDK 6、7 以及 8 都相互兼容,并可以运行在任何 Servlet 2.5+ 容器上。

Spring 框架 5.0 版本作为第一个里程碑版本已经在今年的七月发布,候选版本预期将在十二月左右发布。GA 版本也可能会在 2017 年第一季度发布。Spring 5.0 主要基准有重大更新,将支持 JDK 8+、Servlet 3.1+、JMS 2.0+、JPA 2.1+ 和 JUnit 5。

新版本发布的选取框功能将直接支持响应式网络应用程序,它来源于Reactor 项目曾经实践的与RxJava的密切合作开发。

响应式编程是非阻塞、事件驱动的应用程序,可处理一小部分的线程,背压这种反馈机制旨在保证生产者不会完全压盖过消费者。9 和 Spring 5 采纳的Reactive Streams 规范可以确保不同供应者能在各层以及各库之间相互通信。

在 Spring 5 中,新的Spring Web Reactive网络框架取代了原有的 Spring Web MVC。Spring Web Reactive 支持 @Controller 编程模型,同时提供响应式的网络客户端。它的使用感觉与 Spring MVC 非常相似,但是添加了搭建在 Reactive Streams 和 Reactor 上的非阻塞语义机制。它们将消费请求,写入响应,举个例子来说,使用非阻塞响应式 API 可以让你使用背压写入 HttpSocket。

下面的示例代码摘自一篇博客文章,介绍了 Spring 5.0 M1 的响应式编程,它示例了一个控制器使用完全的非阻塞和响应式方式从远端服务器获取并传送数据。

复制代码
@GetMapping("/accounts/{id}/alerts")
public Flux getAccountAlerts(@PathVariable Long id) {
return this.repository.getAccount(id)
.flatMap(account ->
this.webClient
.perform(get("/alerts/{key}", account.getKey()))
.extract(bodyStream(Alert.class)));
}

除了响应式支持,Spring 核心容器团队还将关注启动性能,尤其是在可能的环境中使用多个线程引导。在演说中,Hoeller 解释说:

当引导应用程序的时候,核心容器会起到很大的作用。在某些程度上来说,这已经是非常优化的了,但是我们也仅仅是尽最大努力给出运行时的信息。提供的信息通常只是一个 JAR 文件,基本上是类路径。

在 5.0 中我们将深入研究额外的设备使用。如果构建过程中将创建一个专门的索引,让我们可以提前了解特定的注释组件而不必完全扫描类路径?并发的引导呢?在环境中的某些让我们使用额外的引导线程的启动过程能并发运行吗?

5.0 版本中的核心容器的 Java 8 将彻底改革,启用核心框架中的一些 APIs,例如开始使用java.util.function类型。对于编程端点管理来说,也给出注释处理方法、lambda 表达式的 HTTP 路由和处理的一些其他选择。框架也将支持客户端和服务器端的 HTTP/2。

Spring 框架 5.0 版本预计将与 JDK9 一起发布,到那时 Spring framework 5.0 M1 将使用现有的 JDK 9 快照的至少是类路径模式正确运行。然而第一个里程碑并不支持这个新的“Jigsaw”模块化系统,对它的支持大约将在随后的里程碑版本中发布。

Hoeller 在大会上透露,鉴于 JDK 9.0 发布的进一步推迟,所以在团队认为时机合适的时候就会先发布 Spring 5.0,因此 Spring 框架 5.1 版本才会完全与 JDK 9 兼容。Spring 5.1 预计会在 2017 年底发布。

查看英文原文Updated Spring 5.0 Roadmap and Reactive Story Presented at SpringOne