写点什么

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:001021
用户头像

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

关注

评论

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

前端 JavaScript 复制粘贴的奥义——Clipboard 对象概述

编程三昧

JavaScript 大前端

腾讯安全姬生利:《数据安全法》下,云上数据安全最佳实践

腾讯安全云鼎实验室

数据安全 云安全 数据安全法

多云部署又添新「云」,EMQ X Cloud 正式支持腾讯云部署

EMQ映云科技

阿里云 IoT 华为云 云平台 #腾讯云

5分钟速读之Rust权威指南(二十七)Rc<T>

wzx

rust

【Linux】使用 systemd 管理 frp 服务

赖猫

Linux 后端

银行业运维指标体系建设实战

云智慧AIOps社区

智能运维

RestTemplate打印日志的正确姿势

编号94530

spring 日志 log RestTemplate

2021年,想要成为年薪百万的Java架构师需要掌握哪些技术?

Java架构师迁哥

为什么大家都在用WebRTC?

anyRTC开发者

音视频 WebRTC 语音通话 视频通讯

墨奇,以“一手之力” 证明你就是你

E科讯

网络为本,博睿数据NPMD用20%的投入实现80%的功能

博睿数据

博睿数据 数据链DNA NPMD

唯品会:在 Flink 容器化与平台化上的建设实践

Apache Flink

flink

1小时学会不打代码制作一个网页精美简历(1)

1_bit

大前端 低代码 iVX 低代码开发平台

云开发是啥?看看它在编程导航项目的实践

程序员鱼皮

Java JavaScript 大前端 后端 云开发

基于jira的需求交付效率统计

好孩子

Jira

新版发布|ShardingSphere 5.0.0-beta 来了!

SphereEx

ShardingSphere

【签约计划】百位签约创作者名单公布

InfoQ写作社区官方

签约计划

剪视频一点都不难,多款超实用剪辑软件全方位评测!

懒得勤快

短视频 视频剪辑 视频制作

网络态势感知是什么?

郑州埃文科技

Flink 和 Iceberg 如何解决数据入湖面临的挑战

Apache Flink

flink

机器数及特点

若尘

计算机组成原理 6月日更

小红书 x StarRocks:实现数据服务平台统一化,简化数据链路,提升高并发极速查询能力

StarRocks

数据库 数据分析 广告系统 小红书 StarRocks

高寿命NVMe SSD应用场景探讨

怀瑾握瑜

区块链 数据库 云计算 SSD 虚拟货币

工作年限、成长路线、进阶技术。怎样才能成为架构师?

Linux服务器开发

Linux服务器开发 Linux后台开发 软件架构师 服务器架构师 C++架构师

北京多部门联合整治违规应用:过度收集用户信息该重罚

石头IT视角

ROS CDK | 云上资源自动化部署新模式

郭旭东

阿里云 ROS 基础设施即代码 IaC

管理者如何避免主观偏见

石云升

职场经验 管理经验 6月日更

58集团 x StarRocks:全面升级数据分析能力,满足多场景业务分析需求

StarRocks

数据库 数据分析 OLAP 58同城 StarRocks

JavaScript 数组操作必须熟练运用的 10 个方法

devpoint

JavaScript array reduce 6月日更

Rust从0到1-泛型-生命周期

rust 泛型 生命周期 generic lifetimes

如何用视频云技术,搞一个爆红的 “反应视频” 项目?

阿里云视频云

阿里云 RTC 英特尔 视频处理 视频制作

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