写点什么

InfoQ 就 Spring Boot 2.0 GA 版发布采访了项目牵头人 Phil Webb

  • 2018-03-12
  • 本文字数:4240 字

    阅读完需:约 14 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

广受期待的 Spring Boot 2.0 近期由 Spring 的托管企业 Pivotal发布。这是Spring Boot 自2014 年6 月推出以来的首次版本升级,也是自2017 年2 月发布广为使用的1.5 版本后的首次发布。

Spring Boot 面向技术“入门者”,对配置结构和自动配置给出了一些强烈推荐(opinionated)的条条框框,并基于注入(injection)默认设置为 Spring 提供了强大的生命周期。它有助于开发人员在保持重叠传递依赖一致性的同时,轻松地启动包含多种技术选择的新应用。

Spring Boot Initializr 自推出近四年来,已经生成了数百万个项目。这使得 Spring Boot 成为一种在整个技术范围内初始化 JVM 应用的标准。

受支持的 Spring Boot 技术已分门别类为 Core、Web、模板引擎、SQL、NoSQL、Messaging、一些基于云的丰富类别、Pivotal Cloud Foundry、Azure、Social、IO 和 Ops 等。这些类别涵盖了当代应用中使用的大部分流行框架。

针对新发布的 Spring Boot,InfoQ 采访了项目牵头人 Phil Webb。

InfoQ:开门见山。Spring Boot 自推出以来,已成为 Spring 产品组合中最重要的平台之一。Spring Boot 2.0 将给出哪些特性?

Webb: 的确如此。Spring Boot 2.0 具有两个主要目标。第一个目标是支持响应式编程(非阻塞应用。这类应用是异步的、事件驱动的,并且扩展所需的线程数量少)。我们为所有支持响应式编程的 Spring 项目提供了自动配置。其中包括 Spring Framework 5.0 附带的 Spring WebFlux。现在也首次支持选择 Netty 作为嵌入服务器。

第二个目标相对不是那么引人关注。为确保能对未来的构建打下一个很好的基础,我们正试图完善我们在 1.x 系列中做出的一些决策。因此在这个版本中,我们做了很多的清理和重构工作。

InfoQ: 有哪些特性是我们已在 1.5 版中习惯的,但是在未来版本中需要做出改变的?

Webb: 对于大多数现有用户来说,并没有什么重大变化。我们仍然提供对配置的约定,仍然根据类路径的内容自动配置 Spring,依然对开发人员自定义的 Bean 提供重试补偿机制(backoff)。开发人员仍然可自行配置属性文件、yaml 文件或环境变量。

人们可能会注意到,具有差异的特性主要是安全配置和 OAuth。对于 OAuth 功能,现在已由一个专门的 Spring Security 项目处理。

InfoQ:新版本是否向后兼容?

Webb: 版本升级后,对开发人员最明显的影响在于属性文件。出于提高一致性的考虑,我们重命名了不少属性。如果开发人员正在迁移现有项目,并使用了良好支持 Spring Boot 的 IDE,那么在尝试使用旧属性名称时会收到警告。我们提供了一个十分有用的迁移器 jar 包。它可以将旧名称映射到新名称,使得开发人员有机会逐步重命名事物。

此外,项目所需的更改量取决于该项目与 Spring Boot 的集成程度。例如,如果开发人员使用了标准的自动配置功能,并使用了一些属性自定义事物,那么确实不应该存在任何迁移上的痛苦。如果项目更为复杂,可能需要做一些代码迁移。对于用户可接触到的特性而言,最大改进是对嵌入 Servlet 容器、执行器端点(Actuator Endpoint)和一些度量的支持。特别是执行器端点,该特性在 2.0 中完全迥异。但如果开发人员需要花一些时间做迁移,那么可以从 Jersey 和 WebFlux 获得免费支持。在迁移指南中,详细地介绍了该迁移器 jar 包的相关信息。

InfoQ: 旧的属性是被弃用了,还是不再支持?

Webb: 旧属性名称仅在使用迁移器项目时受支持。这为我们提供了一种两全其美的做法,即我们可以在重命名属性的同时,保持自身代码库的清洁。但人们依然需要一个迁移路径。这意味着,一旦完成迁移并删除了迁移者,开发人员就不再需要为检查旧名称付出性能上的损失。

InfoQ:新版本是否需要 Spring Framework 5.0 支持?

Webb: 是的。我们一直都需要最新的 Spring Framework 版本,Spring Boot 2.0 也不例外。我们期待 Spring Framework 5.0.3 或更高版本。

InfoQ:最低支持的 Java 版本是什么?

Webb: 当前,最低要求版本是 Java 8。我们大量地使用了 Java 8 的特性和类。因此,Spring Boot 2.0 无法在更早期的 Java 版本上运行。

InfoQ:是否完全支持 Java 9?

Webb: Spring Boot 2.0 完成支持 Java 9。我们实现了持续集成,确保 Spring Boot 可使用 Java 9 构建并运行所有例子代码。在 Wiki 页面 https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-with-Java-9 中提供了更多细节。

InfoQ:是否完全支持 HTTP/2?

Webb: 开发人员可以通过 Jetty、Undertow 或 Tomcat 使用 HTTP/2,细节参见参考文档。简而言之,只要在属性文件中添加server.http2.enabled=true,并配置 SSL 即可。我们并不支 h2c,即明文(cleartext)HTTP/2 协议。

InfoQ:这是否意味着你们将继续支持一些广为使用的应用服务器,诸如 Tomcat、Jetty 和 Thymeleaf?

Webb: 我们继续为嵌入的 Tomcat 8.5、etty 9.4 和 Undertow 1.4 提供支持。对于 WebFlux 应用,开发人员也可以使用嵌入的 Netty 4.1。还可以将 Spring Boot 应用部署到应用服务器,而且我们也会针对 TomEE、Wildfly、WebSphere Liberty Profile 和 Glassfish 测试每个构建。

受支持的 Thymeleaf 最低版本是 3.0。Thymeleaf 将继续提供出色的 Spring 支持,包括针对响应式应用的引擎节流(engine throttling)。

InfoQ: Spring Boot 新版本的发布,是否会与 Oracle 新实施的每 6 个月推出一个新版本的策略保持同步?

Webb: Spring Boot 2.0 采用特性驱动版本。除非我们实现了完整的响应式特性,否则不能称新版本为完成。展望未来,此后推出的几个版本将更加迭代,并且更易于根据日期推出新版本。话虽然这么说,但是 Spring Boot 的发布并不会完全跟随 Oracle 的发布节奏。我们计划与 Spring Framework 的进展亦步亦趋,将在其发布之后数月内发布。

InfoQ:我们在多个新项目中都看见了 Spring Boot 的应用。Spring Boot 的采纳情况如何?

Webb: 就我们所能够追踪的一些指标来看,我们对 Spring Boot 的采纳率非常满意。当然,作为一个开源项目,我们很难得到一个确切的数字。人们只要认为合适,就可以自由地使用该软件,并没有强制要求他们将使用信息反馈给我们。

我们曾使用共享 Maven 下载量为指标。最近我们更喜欢使用从 Spring Initializr(start.spring.io)生成的项目数量。虽然当前采纳的增长率随时间的推移而自然趋于平缓,但就 2017 年而言,已经产生了 470 万的 Initalizr 项目,这比 2016 年增长了 256%。Maven 的下载量的原始数据明显更高,增长了 300%。我很高兴看到这两个增长曲线间具有很好的相关性。

但是我最喜欢的指标是对项目的反馈贡献数。我很高兴看到现在项目代码库具有超过 400 位贡献者。

一些公开提供的数据看上去也十分不错。Spring Boot 就 GitHub 的 Java 项目的 fork 数而言排行第一(排名第二的是 Spring 框架),就 GitHub 的 Java 项目的星标数而言排行第七。

InfoQ:终止支持版本 1.x 是否已经提上日程?

Webb: 通常,Spring 项目的主版本会提供三年的支持,小版本提供 12 个月的支持。鉴于 Spring Boot 1.0 是 2014 年发布的,1.5 版在 2017 年早期发布,已经接近常规支持协议的上限了。我们完全理解人们需要一定升级的时间,这样我们规划至少对 1.5 版提供支持到明年。

InfoQ: 能否给出一个以前版本并不提供的响应式支持的例子吗?是否需要使用 WebFlux 和 Reactor,才能从响应式中受益?还是具体实现自然会为用户提供响应式的好处?如果是这样,如何实现?

Webb: 我认为 Spring 在反应式编程上具有相当独特的地位。虽然我们可以一头扎入其中,并完全采用响应式技术栈,但也可以从更小处着手。实际上,开发人员可以从基于 Servlet 的 MVC 应用返回响应式类型(Flux 和 Mono),这将会工作。虽然开发人员从中并不能获得任何好处,但是他们不必完全转向新的体系结构,就可以有机会尝试响应式 API。Spring Framework 5.0 还引入了一个新的 WebClient API。该 API 提供了一种非常自然的调用远程 Web 服务的方式。该 API 大量地使用了 Reactor 类型,使开发人员可以用十分自然的方式编写操作。

还应该看到,除了传统的同步阻塞模型之外,我们还提供了响应式编程选项。团队正致力于为开发人员提供对两种模式的选择,并将继续在这两个方面上投入精力。

InfoQ: 除了 Java 之外,Spring Boot 还原生支持哪些 JVM 语言?

Webb: 开发人员可以使用几乎所有具有良好 Java 互操作性的 JVM 语言编写 Spring Boot 应用。如果开发人员想使用除 Java 以外的其它一些开发方式,Groovy 和 Kotlin 无疑也是很好的选择。

InfoQ:Python 的使用日益广泛。Spring 团队是否也对 Python 平台做了一些工作?

Webb: 我并不了解有 Spring 项目正在使用 Python。Spring 显然是基于多年开发工作的支持,所以我们基于 JVM 语言是完全合情合理的。项目近期对另一种语言 Kotlin 做了一些投资。Spring 框架和 Spring Boot 都具有 Kotlin 扩展,这些扩展提供了一流的开箱即可用的 Kotlin 体验。

InfoQ:您提及了在安全上的一些改进。Spring Boot 是否会使用去年新推出的 Spring Security 5.0?

Webb: 是的。Spring Security 5.0 是 Spring Boot 2.0 的最小需求。

InfoQ: 您能介绍一下对于安全所做的一些特定改进吗?

Webb: 为支持响应式编程,Spring Security 本身就给出了一整套新的 API。如果开发人员熟悉现有的 Spring Security 概念,那么相应的响应式概念也非常易于上手。

在 2.0 版中,Spring Boot 安全配置也得到了简化。并且为了实现更简化的模型,移除了 1.5 版支持的一些较为复杂的用户化设置。在此博客帖子中详细解释了上述改进的合理之处。

InfoQ: 使用 Micrometer 度量是一个新的做法,还是内建的?是否对 JMX 可用?

Webb: 在 2.0 版中, Micrometer.io 取代了之前 Spring Boot 本身提供的度量 API。我们自动为各种技术提供工具,例如 Spring MVC、RestTemplate、DataSource Pools 等。使用 Micrometer 可以实现类似于 Boot 1.5 的方式,通过 JMX 和 HTTP 公开各种度量。真正令人兴奋之处在于,使用 Micrometer 还可以将度量提供到多种不同的后端。我们正在实现对导出度量到 Atlas、Datadog、Ganglia、Graphite、New Relic、Prometheus、SignalFX 和 StatsD 的支持。

被访者简介

Phil Webb 供职于 Pivotal,他当前是 Spring Boot 项目的牵头人。他来自于英国,但目前和他的家人一起生活在美国加州。

查看英文原文: Spring Boot 2.0 Goes GA; Project Lead Phil Webb Speaks to InfoQ About the New Release

2018-03-12 19:001086
用户头像

发布了 391 篇内容, 共 136.9 次阅读, 收获喜欢 256 次。

关注

评论

发布
暂无评论
发现更多内容

瑞技伙伴 | WEKA® Data Platform,为AI等高性能工作负载提供澎湃动力

Bytebridge

AI HPC 存储方案 WEKA

一招解密网络流量瓶颈!

观测云

基础设施 网络流量分析

云桌面系统简介与深度解析

青椒云云电脑

桌面云 云桌面 云桌面系统

ChatGPT上新,效果炸裂,知识平台才是大模型的最佳狩猎场

数新网络官方账号

openai ChatGPT

七个优秀微服务跟踪工具

高端章鱼哥

微服务架构

DBeaverUltimate for Mac(数据库管理软件) 终极版下载

iMac小白

DBeaver Ultimate软件 DBeaverUltimate下载 DBeaverUltimate破解版

KubeBlocks v0.7.0 发布!支持引用外部组件,解耦备份 API,还支持了 Pika!

小猿姐

数据库 云原生

采用GraphQL消灭页面数据加工代码

neverwinter

BFF graphql spring-boot

Microsoft Remote Desktop for Mac(远程桌面连接工具)激活版

iMac小白

microsoft remote desktop

Util应用框架快速入门(四)- 集成测试 快速入门

何镇汐

C# 开源 后端 软件开发

云电脑哪家好?主流云电脑平台详细测评

青椒云云电脑

云电脑

改良版芯片重回中国市场?GPT-5 明年降临?丨 RTE 开发者日报 Vol.82

声网

案例分享:某汽车企业通过龙智拓展Jira功能,实现高效项目管理

龙智—DevSecOps解决方案

mac触控板鼠标控制软件 Bettertouchtool 4.291中文破解下载

iMac小白

BetterTouchTool破解

桌面云一体机有哪些厂家?价格怎么样?

青椒云云电脑

桌面云 云桌面

Navicat Premium 15 for Mac(数据库开发工具)v15.0.36中文激活版

mac

Navicat Premium 苹果mac Windows软件 数据库管理软件

最好用的文件管理浏览 Path Finder直装激活中文版

iMac小白

Path Finder破解 Path Finder下载

常用压力测试工具锦集

优测云服务平台

SmartBear正式收购Stoplight,并计划在核心API设计、文档和门户产品中集成其功能

龙智—DevSecOps解决方案

SmartBear Stoplight

Senparc 基础库全面适配 .NET 8.0

不在线第一只蜗牛

.net

十个使用Spring Cloud和Java创建微服务的实践案例

树上有只程序猿

Java 微服务 SpringCloud

浅析KV存储之长尾时延解决办法

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟

Presentation Prompter for Mac(mac屏幕提词器) v5.4.2永久激活版

mac

苹果mac Windows软件 Presentation Prompter 屏幕提词器软件

中国集成电路设计业2023年会演讲预告 | 龙智Perforce专家解析半导体设计中的数字资产管理

龙智—DevSecOps解决方案

芯片

Util应用框架快速入门(五)- 权限 快速入门

何镇汐

C# 开源 后端 软件开发

ChatGPT-4:OpenAI的革命性升级

EquatorCoco

人工智能 ChatGPT GPT-4

为什么OpenAPI是未来企业数字化转型的决定性因素?

华为云开发者联盟

云计算 后端 华为云 华为云开发者联盟 华为云API Explorer

如何优雅的开发?试试这个低代码项目

树上有只程序猿

软件开发 低代码 JNFP

InfoQ就Spring Boot 2.0 GA版发布采访了项目牵头人Phil Webb_Java_Victor Grazi_InfoQ精选文章