[关闭]
@Rays 2018-03-11T12:03:42.000000Z 字数 5048 阅读 1486

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

语言开发


摘要: 广受期待的Spring Boot 2.0近期由Spring的托管企业Pivotal发布。InfoQ采访了Spring Boot项目牵头人Phil Webb。

作者: Victor Grazi

正文:

广受期待的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

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注