【AICon】探索八个行业创新案例,教你在教育、金融、医疗、法律等领域实践大模型技术! >>> 了解详情
写点什么

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

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

关注

评论

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

数字货币量化交易APP开发|数字货币量化交易系统软件开发

系统开发

双指针高频面试题:三数之和的「升级篇」...

宫水三叶的刷题日记

面试 LeetCode 数据结构与算法

华为发布智能云网“五个一”新能力,助力运营商完成云与网的价值归一

脑极体

逆向思维:从小厂到面试大厂,这份学习笔记助我快速成长,实现高薪岗位

Java架构之路

Java 程序员 架构 面试 编程语言

insert、update、delete注入总结

Cc.

网络安全

网格量化交易机器人系统开发|网格量化交易机器人软件APP开发

系统开发

运维工程师小张的日记

XSKY星辰天合

真实!对比(阿里/京东等一线大厂)Java面试真题,自己把自己菜哭了

Java架构之路

Java 程序员 架构 面试 编程语言

利用xml实现数据传输

天狼

基于WASM的无侵入式全链路A/B Test实践

韩陆

应云而生,幽灵的威胁 - 云原生应用交付与运维的思考

阿里巴巴云原生

云计算 容器 微服务 云原生 k8s

图解定时任务线程池

叫练

面试 定时任务 线程池 Timer 线程池工作原理

Flutter-从入门到项目 07: 微信项目-发现页面

iOSer

flutter ios 小程序flutter, 跨平台

分享我的2021京东4面面经,送给备战金三银四的你

Java架构之路

Java 程序员 架构 面试 编程语言

卓越级!浪潮云通过可信云云管理服务能力评估

浪潮云

源码解析--skywalking agent插件加载流程

cloudcoder

Skywalking 源码剖析 插件设计

「超全!」谷歌大神LeetCode刷题笔记PDF分享

C语言与CPP编程

c++ 程序员 算法 LeetCode 编程、

大牛荐书 | 百度技术大牛都在读的7本书!

百度Geek说

技术 技术人 书籍推荐 技术书籍

滴滴Kafka服务体系建设,实战干货都在这里!

滴滴云

大数据 Obsuite 滴滴Kafka

python精度控制

里昂

Python 数据结构

币管家软件开发|币管家系统APP开发

系统开发

OpenYurt 如何 “0 侵入” 攻破云边融合难点

阿里巴巴云原生

云计算 Serverless 容器 云原生 边缘计算

Serverless 2.0,鸡蛋还是银弹?

Serverless Devs

腾讯云 阿里云 Serverless 运维 大前端

架构设计篇之微服务实战笔记(六)

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作 架构师成长笔记

为语音社交平台加一个防护罩,即构上线实时语音安全方案

ZEGO即构

容器 & 服务:Docker 应用的 Jenkins 构建(二)

程序员架构进阶

容器 服务化 七日更 28天写作 2月春节不断更

CIO/CTO必读 | 数字转型时代,企业存储支出知多少

焱融科技

存储 焱融科技 CIO 存储成本 IT成本

“他者”德意志(一):“进窄门”的德国AI

脑极体

翻译:《实用的Python编程》02_06_List_comprehension

codists

Python

Docker 镜像加速教程

米开朗基杨

Docker 云原生

瓦力量化交易机器人软件开发|瓦力量化交易机器人APP系统开发

系统开发

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