Spring Boot 1.3发布,包含DevTools和ASCII Art特性

jopen 9年前
 

Spring的管理者Pivotal公司 发布了Spring Boot 1.3 ,它为Java类/Spring配置新增了热重载功能(使用了一个新的 spring-boot-devtools 模块)、缓存自动配置(支持EhCache、Hazelcast、Infinispan、JCache、Redis和Guava),并且还能为Linux/Unix提供完全可执行的归档文件。这个版本的 发布说明 详细描述了这些变化。

一个非常有意思的特性就是在banner.txt中可以包含彩色的ANSI编码。这样当应用启动的时候,就能在你的控制台上展现艺术化的信息了。例如:

或者参见最新释放的JHipster:

如果你希望通过这个特性发挥一下创造性的话,Craig Burke为Spring Boot创建了一个 图片到ascii-art的转换器

InfoQ邀请到了Spring Boot团队中的主要贡献者Dr. Dave Syer、Phillip Webb、Stéphane Nicoll、Andy Wilkinson和Josh Long,针对这个发布版本,举行了一个Q&A交流。

InfoQ:看起来,Spring Boot是一个很流行的项目。对于Java社区对它的反应,你们应该感到很开心吧?

Spring Boot团队: 非常开心!我们认为有两个原因推动了Spring Boot的流行。第一个原因是Java 8在一定程度上触发了Java的重新崛起。与Java 7相比,使用Java 8编码要有趣得多!第二个原因在于Spring Boot构建在一个巨大的基础之上。Spring生态系统很大,许多人可能没有太多的时间了解每个不同的项目。通过快速上手和简单尝试,我们能够让您着重体验到那些原本会忽略掉的特性。关于这一点,我们有一个很好的例子,就是Spring Data + Hibernate + 内存DB。通过移除所有显式的配置,能够非常容易地展现Spring Data Repository的真正威力。您能够实现动态语言级别的生产率,同时还能具备JVM的类型安全、并发、稳定性以及性能。

InfoQ:在Spring Boot 1.3中,你最喜欢的特性是什么?

Spring Boot团队: 在内部,我们曾经开玩笑说,我们花了八个月的时间开发devtools、缓存、metrics以及更加自动化的配置等特性,但是人们最喜欢的是——彩色的 banner!可能最独特的特性,也是在其他地方我们所没有见过的就是完全可执行的JAR。通过简单地输入“ln -s”就能创建unix服务也是非常棒的。

InfoQ:这次看起来是一个很大的发布版本,为什么不将其称为2.0呢?

Spring Boot团队: Spring Framework在版本号方面上是非常保守的,在十多年的发展后,它的版本号才是4。我们想延续这一传统,同时也想说明,对于大多数人来说,这次的升级不会带来很多的痛苦。当Spring 5.0出来之后,我们将会发布2.0版本,同时,它的最低需求是Java 8.

InfoQ:你们有没有计划减少Spring Boot应用所占用的内存?

Spring Boot团队: 针对Spring应用所报告的内存,有时候会有一定的误导性。我们过去曾经见过误报的报告,实际上是内部缓存在消耗内存,并且它们还没有被GC。例如在 Spring Boot仓库中的Freemarker样例应用,在Java 8下使用-Xmx32MB配置就能运行得很好(当然,它确实还使用了一些非堆内存)。在Spring Framework中,对缓存逻辑的优化最近确实也在进行,并且还有计划对其进行重新考虑。读者所共享的所有消耗大量内存的样例应用都会为我们提供帮助。

InfoQ:在云环境中(如AWS、Cloud Foundry、Heroku),组织(部署、监控、替换)Spring Boot微服务流程的最佳方式是什么?

Spring Boot团队:Spring Boot在各个地方都运行得非常好,包括Heroku、OpenShift、Google Cloud、Oracle Cloud、Azure等等,关于如何在这些平台上运行Spring Boot(以及通常常见的Spring Cloud)应用都有公开的博客文章和访谈。在Spring Boot的参考手册中,我们甚至编写了针对几个大型云平台的操作步骤。如果你试图组织自己的流程和平台(最好不要这样做),那么你会发现我们已经在 http://spring.io/guides 上提供了将Docker和Spring Boot集成在一起的指南。

对于大多数人来说,我们强烈认为Cloud Foundry是具有极大优势的,只需简单地执行cf push -p foo.jar foo,你的工作就完事了。Spring Cloud团队已经将Netflix OSS和Pivotal Cloud Foundry集成在了一起,这也是非常棒的。

InfoQ:你们觉得Java 9或Java 8中有什么特性能够帮助到Spring Boot吗?

Spring Boot团队:按照JDK 9的最终形态,它可能会成为模块化Spring应用的基础。Spring Framework 5将会尽其所能允许应用基于JDK 9开发……而Spring Boot 2也会如此,尤其是统一基于模块路径(modulepath)启动JVM,完全避免以前的classpath。

对Java EE 8来说,我们看到HTTP/2引起了大家广泛的兴趣。在Spring Boot中,虽然现在已经可以使用HTTP/2了(Jetty和Undertow已经对其提供了支持),但是Servlet 4.0对它的官方支持依然值得期待。其他的Java EE 8规范也会根据需求提供支持。我们认为对JMS 2.1会有很强烈的需求。Spring Boot已经提供了对JCache 1.0的支持,Spring Framework也已经支持Hibernate 5.0了。我们还需要对Spring Boot做些工作,才能使其完全支持Hibernate 5.0,这有望在1.4版本中实现。

InfoQ:你们能给刚刚接触Spring Boot的初学者推荐一些视频吗?

Spring Boot团队: Brian Clozel和Stéphane Nicoll最近做了一个 Devoxx访谈 现在已经上线了。这个访谈比大多数的会议录像要长得多,因此能够涉及更多的细节。在2014年,Phil Webb曾经对Josh Long做个一个很有意思的访谈,它能够帮助你 大致掌握Spring Boot的特性 ,Josh还曾经做过一个 很棒的个人演讲 ,它位于vimeo网站上,更加关注的是微服务的主题。

InfoQ:对于Spring Boot的高级用户,你们有什么要推荐的视频吗?

Spring Boot团队: Nicholas Frankel的 Spring Boot for DevOps 上有很多有用的信息,涵盖了高级用户可能会感兴趣的一些扩展点。除此之外,我推荐看一些关于Spring Cloud的讨论。Dave Syer和Josh Long有一个 很棒的入门访谈 ,你还应该看一下Jon Schneider和Taylor Wicksell 对Spring Cloud和Netflix的讨论 (这是在今年的SpringOne2GX会议上得票最多的讨论之一)。

InfoQ:在start.spring.io上,是否收集到了用户选择哪个starter的统计数据呢?如果收集到的话,你们有什么可以分享的吗?

Spring Boot团队: 是的,我们收集到了统计数据,并且 在最近的一篇博客文章中 进行了描述。基于Maven并且使用jar作为打包方式的Java 8工程占据了主导地位。 start.spring.io 每个月平均会生成50,000个项目,我们计划推出更多的定期统计数据。

InfoQ:在Spring Boot 1.3中,彩色的banner.txt是一个很有意思并且很好玩的特性。那么你们有没有计划彩色打印日志,不同的日志级别显示为不同的颜色?

Spring Boot团队:在1.3版本中已经支持根据日志级别改变颜色。在默认控制台日志配置中,我们为不同的级别设置了颜色:INFO是绿色的,WARN是黄色的,而ERROR是红色的。如果使用%clr转换词的话,我们可以改变整行的颜色。大致如下所示:

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%15.15t] %-40.40logger{39} : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx})

我们默认没有启用它的原因在于,在一些终端主题中,这会使得日志很难阅读。

InfoQ还与Julien Dubois进行了交流,他是 JHipster 的创立者,JHipster会使用AngularJS和Spring Boot来创建项目。Dubois是Spring Boot的长期用户,作为高级用户,我们希望他会有一些独特的视角。

InfoQ:您是什么时候开始使用Spring Boot的呢?

Julien Dubois:JHipster启动的时间要比Spring Boot早几个月,我们有一些最初的目标非常类似于当前Spring Boot所提供的功能。

在 2013年的11月,我与好友Josh Long共进午餐,当时他正在巴黎休假。当我们在星巴克喝咖啡的时候,他向我介绍了Spring Boot:我马上认识到它能够给JHipster带来很大的帮助,Spring Boot替换了我们自定义的Spring代码,这是项目的一个巨大进步。两年后,我可以很高兴地说这是一个正确的决策!

InfoQ:在Spring Boot的不同版本间进行升级的时候,您有什么经验吗?

Dubois:升级Spring Boot版本通常会耗费一些时间,这是因为我们与它进行了紧密的集成。我们使用了Spring Boot所提供的Maven BOM(Bill Of Materials),所以需要检查对其进行升级时,我们的功能是否能够正常运行:通常这不会有什么问题,但我们有一些第三方依赖,所以可能会出现问题,这需要我们指定依赖的具体版本号。新的Spring Boot版本也会提供新的特性,如新的健康检查和自动化配置:在这种情况下,我们的主要任务是与其进行集成,移除完成相同功能的已有代码,我们可能会在此之上添加一个图形化的界面。

一个很好的例子就是Spring Boot 1.3所提供的对Cassandra的支持,来自JHipster的代码也包含在了Spring Boot中。显然,我们需要删除掉所有来自JHipster的代码并使用Spring Boot所提供的代码!对我们来说,这是很好的事情,因为这种技术化的代码显然不应该在JHipster的范围内,只有没有更好的解决方案时,我们才会将其添加到我们的项目中。

InfoQ:在Spring Boot 1.3中,你最喜欢的特性是什么?

Dubois: 在Spring Boot 1.3中,有一个属性我非常喜欢,那就是新的devtools!!!在开发JHipster的时候,我们曾经非常艰苦地实现热重载功能:可以看一下我们的JHipster Loaded项目,它现在已经消亡了,参见 https://github.com/jhipster/jhipster-loaded 。这涉及了很多的工作,我们为此花费了数周的时间,最终的结果却是依然有很多bug。新的Spring Boot devtools很漂亮地解决了这个问题,并且没有那么多的bug!对于我们的终端用户来说,整体的体验非常棒,因为他们可以通过BrowserSync 实现前端更新,同时还能通过Spring Boot devtools实现后端更新。这能够带来非常好的体验,所有的内容都能随时自动更新,这使用起来非常棒,对于来自传统Java开发环境的人来说,这简直就是一种惊喜。

InfoQ:您有什么特殊的特性希望添加到Spring Boot中吗?

Dubois: 对我来讲,这是在Spring中长期存在的一个问题,那就是我希望有更短的启动时间。Devtools在开发阶段实现了这一点,但是对于很多云提供商来说,启动时间也是很重要的。例如,有些Spring bean可以异步启动:实际上,这也是我们为支持Liquibase所采用的手动编码的方式,这使我们的启动时间下降了40%。当然,它可以更加智能一些,以最佳方式使用所有可用的CPU核心。

查看英文原文: Spring Boot 1.3 Released Featuring DevTools and ASCII Art