【AICon】AI 基础设施、LLM运维、大模型训练与推理,一场会议,全方位涵盖! >>> 了解详情
写点什么

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

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

关注

评论

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

开门见山|首期《崖山论“见”》技术 Meetup启程

YashanDB

JAVA实战:如何让单元测试覆盖率达到80%甚至以上

Java你猿哥

Java ssm 单元测试 Java工程师 java实战

蛇形走线用在哪里,一文告诉你

华秋PCB

信号 PCB PCB设计 布线 滤波

模型训练过程中,混合精度训练稳定性解决方案

Openlab_cosmoplat

模型训练 开源社区

优秀!阿里甩出GC面试小册,仅7天Github获赞96.9K

Java你猿哥

Java ssm 面经 GC Java工程师

在 Kubernetes 中部署应用交付服务(第 1 部分)

NGINX开源社区

丝滑!用了这款开发工具,我成了整个公司代码写得最秀的码农

这我可不懂

程序员 码农 低代码 JNPF

ITSM | 如何通过设计提升工单处理效率

嘉为蓝鲸

IT ITSM 流程管理

精华抢先看|龙蜥社区操作系统安全两大白皮书即将重磅发布

OpenAnolis小助手

操作系统 白皮书 系统安全 Meetup 龙蜥社区

聊聊池化层和步长为2的卷积层

华为云开发者联盟

人工智能 华为云 华为云开发者联盟 企业号 3 月 PK 榜 卷积层

2023飞书未来无限大会谢欣演讲highlight:三件套、Office提升、出海

B Impact

电力行业等保定级评级依据是什么?分为几个等级?

行云管家

电力 等保 等保测评

小程序营销模板的发展现状及前景分析

没有用户名丶

小程序

Downie Mac使用教程:如何下载B站(哔哩哔哩)高清视频?Downie4许可证

魔仙苹果mac堡

苹果 bilibili Downie下载

【活动报名】 拥抱公平《 Impact Tech, She Can 》

亚马逊云科技 (Amazon Web Services)

人工智能

大数据计算引擎 EasyMR:拥抱开源,引领技术创新

袋鼠云数栈

大数据 大数据基础平台

BugBuilder: 高质量大规模缺陷库自动构建方法

华为云开发者联盟

开发 华为云 补丁 华为云开发者联盟 企业号 3 月 PK 榜

2023年实用性好的堡垒机推荐

行云管家

网络安全 堡垒机

2023年好用的谷歌浏览器插件推荐(Chrome必备扩展程序) 安装教程

互联网搬砖工作者

用 JavaScript 写出一个彩票系统?

泰罗凹凸曼

JavaScript 前端

ChatGPT能否取代程序员?仍然是一个需要认真探讨的问题,对此你怎么看?

兴科Sinco

OpenAPI openai #人工智能 ChatGPT

直击面试!阿里技术官手码12W字面试小册在Github上爆火

Java你猿哥

Java 后端 面经 简历 Java工程师

融合低代码与GPT,微软的又一个神奇颠覆

ToB行业头条

gRPC快速整合SpringCloud

Java你猿哥

Java gRPC Spring Cloud 后端 ssm

手把手教你如何使用MyBatisPlus

Java你猿哥

mybatis 实战 Mybatis-Plus

软件测试/测试开发丨app自动化测试之Appium 源码修改定制分析

测试人

软件测试 自动化测试 测试开发 appium

火山引擎VeDI零售行业解决方案 聚焦精准营销场景提升品牌转化

字节跳动数据平台

大数据 云服务 数据平台 企业号 3 月 PK 榜

MySQL中这14个小玩意,让人眼前一亮!

Java你猿哥

Java MySQL 后端 ssm Java工程师

记一次 rr 和硬件断点解决内存踩踏问题

NebulaGraph

数据库 debug

瓴羊Quick BI数据门户,让管理企业像浏览网页一样轻松

对不起该用户已成仙‖

XLD音频无损解码器:X Lossless Decoder中文激活版

真大的脸盆

Mac Mac 软件 音频解码 音频处理工具 音频管理

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