QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

在Inteillj IDEA中使用Spark操作Hive

北桥苏

spark hive Big Data

Logstash同步MySQL关联表到Elasticsearch的嵌套文档中

北桥苏

elasticsearch Logstash ELK Stack

简单聊聊Java中线程安全有哪些实现思路?

做梦都在改BUG

Java 多线程

平台工程 | 内部开发者门户权威指南

杨振涛

DevOps 平台 平台工程 内部开发者平台 内部开发门户

程序员晋升指南!13年顶级架构设计经验的锦囊妙计与实践分享

Java你猿哥

Java 架构 ssm 架构设计 架构师

Logstash同步MySQL一对多关联表到Elasticsearch父子文档

北桥苏

elasticsearch Logstash ELK Stack

深入解析Java适配器模式:将接口转换为你所需要的形式

做梦都在改BUG

Java 适配器

BOSS直聘首发半小时被下架!300MB实战SpringBoot笔记爆赞过百万

做梦都在改BUG

Java spring Spring Boot 框架

浅谈Kafka2.8+在Windows下的搭建与使用

北桥苏

php scala kafka

用扩展的方式在 PHP 中使用 Kafka

北桥苏

php Kakfa

干货力荐!京东首席架构师:亿级流量架构的核心技术文档

做梦都在改BUG

Java 架构 亿级流量

Github火到CSDN, 字节高级架构师亲码出 elasticsearch 实战手册

做梦都在改BUG

Java 搜索引擎 elasticsearch ES

毫不夸张的说,这份SpringBoot学习指南能解决你遇到的98%的问题

做梦都在改BUG

Java spring Spring Boot 框架

PoseiSwap:合规、隐私与支持更广泛的资产

鳄鱼视界

独一份,15年经验汇聚而成的《SpringBoot“踩坑”手册》首次开源

做梦都在改BUG

Java spring Spring Boot 框架

windows下Hive搭建踩坑汇总

北桥苏

hadoop hive hql

PoseiSwap:合规、隐私与支持更广泛的资产

股市老人

关于 PHP 启动 MongoDb 找不到指定模块问题

北桥苏

php mongodb

必知必会的JavaScript前端面试题篇(二),不看后悔!

沉浸式趣谈

最简单的canal 1.1.6服务搭建方法

北桥苏

elasticsearch canal

如何让ESP8266板子像APP开发一样方便

北桥苏

php 物联网 esp8266 mqtt

n-Track Studio 9录音、音频编辑一站式完成!

真大的脸盆

Mac 音频制作 Mac 软件 音频处理 录音工具

创意世界在 Photoshop 上运行~

真大的脸盆

Mac ps Mac 软件 Photoshop 2022下载

单调栈模板总结及应用

timerring

算法

由Elasticsearch7.8评分脚本引起的一个索引迁移解决方法

北桥苏

elasticsearch Logstash ELK Stack

背废完虐面试官!字节架构师8年心血终成《图解设计模式》手册

做梦都在改BUG

Java 设计模式

逆袭!阿里专家手码23版Java面试三件套,Github星标直线狂飙

Java你猿哥

Java 微服务 面经 算法题 java核心知识点

Logstash如何批量同步MySQL多表到ElasticSearch

北桥苏

elasticsearch Logstash ELK Stack

Windows下hadoop环境搭建之NameNode启动报错

北桥苏

大数据 hadoop

如何通过Logstash将MySQL数据同步到ElasticSearch

北桥苏

php MySQL elasticsearch Logstash

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