QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

  • 2015-12-09
  • 本文字数:4256 字

    阅读完需:约 14 分钟

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

2015-12-09 18:004400

评论

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

干货帖 | TDSQL-A核心架构揭秘

腾讯云数据库

数据库 tdsql

老骥伏枥-network policy之iptables实现

Lance

Apache Hudi 在 B 站构建实时数据湖的实践

Apache Flink

大数据 flink

架构实战营模块八作业

maybe

TDSQL-C 数据库架构

腾讯云数据库

数据库 tdsql

Flink 在 58 同城的应用与实践

Apache Flink

大数据 flink

Vue进阶(幺贰陆):表格复用 TypeError: _self.$scopedSlots.default is not a function解决方法

No Silver Bullet

Vue 9月日更

TDSQL全时态数据库的价值和意义

腾讯云数据库

数据库 tdsql

ECMAScript 2021(ES12)新特性简介

程序那些事

JavaScript ecmascript 程序那些事 ES12

模块八作业

VE

架构实战营

论亚马逊QLDB与腾讯TDSQL架构与功能

腾讯云数据库

数据库 tdsql

腾讯云分布式数据库TDSQL再获认可

腾讯云数据库

数据库 tdsql

为什么说腾讯云TDSQL是金融行业的“杀手锏”级应用?

腾讯云数据库

数据库 tdsql

啥都复用不了,还谈什么中台!

菜根老谭

中台 复用 技术管理 平台架构

索信达控股:新一代金融知识图谱解决方案的落地应用和研究

索信达控股

金融科技 金融 知识图谱

带你学会区分Scheduled Thread Pool Executor 与Timer

华为云开发者联盟

线程 线程池 Timer 任务调度 JDK 1.5

我们应该如何过好自己这一生?

Phoenix

心理学

“十三五”新型显示重大科技成果落地对接及产业发展研讨会召开

科技热闻

37 手游基于 Flink CDC + Hudi 湖仓一体方案实践

Apache Flink

大数据 flink

深入解读TDSQL-C的内核关键技术

腾讯云数据库

数据库 tdsql

SpringMVC源码分析-HandlerAdapter(3)-RequestMappingHandlerAdapter请求处理

Brave

源码 springmvc 9月日更

如何写出安全又可靠的PHP脚本

咔咔

php

OSCAR纪实:华为与开源生态伙伴协力同行,共创未来

科技热闻

设计消息队列存储信息数据的MySQL表格

木云先森

架构训练营

分布迁移下的深度学习时间序列异常检测方法探究

云智慧AIOps社区

深度学习 异常检测 技术学习 智能运维 分布迁移

大力出奇迹,揭秘昇腾CANN的AI超能力

华为云开发者联盟

AI 算法 算力 CANN

揭秘腾讯TDSQL全时态数据库系统

腾讯云数据库

数据库 tdsql

亚马逊QLDB与腾讯TDSQL生产背景与模型

腾讯云数据库

数据库 tdsql

揭秘TDSQL-A分布式执行框架:解放OLAP关联分析查询性能瓶颈

腾讯云数据库

数据库 tdsql

汽车智能座舱中 显示屏市场战略趋势分析 上篇

SOA开发者

软件定义汽车

Confluence OGNL 注入漏洞的严重安全问题

HoneyMoose

Spring Boot 1.3发布,包含DevTools和ASCII Art特性_Java_Matt Raible_InfoQ精选文章