02_Spring Boot 2.0 都更新了什么

原文地址:

http://note.youdao.com/noteshare

2018 年 3 ⽉ 1 号 Spring Boot 2.0.0.RELEASE 正式发布,这是 Spring Boot 1.0 发布 4 年之后第⼀次重⼤修订,因此有多新功能和特性值得关注!在 Spring Boot 官⽅博客中我们了解到:Spring Boot 2.0 版本经历了17 个⽉的开发,有 215 个不同的使⽤者提供了超过 6800 次的提交。

我们将 Spring Boot 2.0 更新的技术分为三类进⾏解读:

第⼀类,基础环境升级;

第⼆类,默认软件替换和优化;

第三类,引⼊新的技术。

基础环境升级

最低 JDK 8,⽀持 JDK 9,不再⽀持 Java 6 和 7

依赖组件升级

Spring Boot 2.0 基于 Spring Framework 5 构建,本次 Spring Boot 的升级,同时也升级了部分其依赖的第三⽅组件,主要有以下⼏个:

Jetty 9.4,Jetty 是⼀个开源的 Servlet 容器,它为基于 Java 的 Web 内容,例如 JSP 和 Servlet 提供运⾏环境。Jetty 是使⽤ Java 语⾔编写的,它的 API 以⼀

组 JAR 包的形式发布。

Tomcat 8.5,Apache Tomcat 8.5.x 旨在取代 8.0.x,完全⽀持 Java 9。

Flyway 5,Flyway 是独⽴于数据库的应⽤、管理并跟踪数据库变更的数据库版本管理⼯具。⽤通俗的话讲,Flyway 可以像 SVN 管理不同⼈的代码那样,管理不同⼈的 SQL 脚本,从⽽做到数据库同步。

Hibernate 5.2,Hibernate 是⼀款⾮常流⾏的 ORM 框架。

Gradle 3.4,Spring Boot 的 Gradle 插件在很⼤程度上已被重写,有了重⼤的改进。

Thymeleaf 3.0,Thymeleaf 3 相对于 Thymeleaf 2 有⾮常⼤的性能提升。

默认软件替换和优化

HikariCP

默认连接池已从 Tomcat 切换到 HikariCP,HikariCP 是一个高性能的 JDBC 连接池,Hikari 是?语“光”的意思。HikariCP 号称是 Java 业界最快的数据库连接池

Security

Spring Security 是 Spring 社区的?个顶级项?,也是 Spring Boot 官?推荐使?的 Security 框架。

OAuth 2

OAuth 2 是一个授权框架,或称授权标准,它可以使第三方应用程序或客户端获得对 HTTP 服务上(如Google、GitHub )用户帐户信息的有限访问权限。OAuth 2 通过将?户身份验证委派给托管?户帐户的服务以及授权客户端访问用户帐户进工作。Spring Boot 2.0 将 Spring Security OAuth 项?迁移到 Spring Security。不再提供单独的依赖包,SpringBoot 2 通过 Spring Security 5 提供 OAuth 2.0 客户端支持。

Micrometer

Micrometer 是?款监控指标的度量类库,可以让你在没有供应商锁定的情况下对 JVM 的应用程序代码进行调整。

Redis 默认使⽤用 Lettuce

Lettuce 是⼀一个可伸缩的线程安全的 Redis 客户端,⽤用于同步、异步和反应使⽤用。多个线程可以共享同⼀一个

RedisConnection,它利利⽤用优秀 Netty NIO 框架来⾼高效地管理理多个连接,⽀支持先进的 Redis 功能,如

Sentinel、集群、流⽔水线、⾃自动重新连接和 Redis 数据模型。

配置属性绑定

新的 Binder API 也可以直接使⽤用 @ConfigurationProperties 在代码中。例例如,下⾯面绑定 List 中的PersonName 对象:

List<PersonName> people = Binder.get(environment) .bind("my.property", Bindable.listOf(PersonName.class)) .orElseThrow(IllegalStateException::new);

配置源可以像这样在 YAML 中表示

my: property: - first-name: Jane last-name: Doe - first-name: John last-name: Doe

转换器器⽀支持

Binding 使⽤用了了⼀一个新的 ApplicationConversionService 类,它提供了了⼀一些额外有⽤用的转化。最引⼈人注⽬目的是转换器器的 Duration 类型和分隔字符串串。

Actuator 改进

在 Spring Boot 2.0 中 Actuator endpoints 有很⼤大的改进,所有 HTTP Actuator endpoints 现在都在该 /actuator 路路径下公开,并且⽣生成的 JSON 有效负载得到了了改进。

测试

对 Spring Boot 2.0 中测试进⾏行行了了⼀一些补充和调整:

  • @WebFluxTest 已添加新注释以⽀支持 WebFlux 应⽤用程序的“slice”测试。
  • Converter 和 GenericConverter beans 现在⾃自动扫描 @WebMvcTest 和 @WebFluxTest。
  • @AutoConfigureWebTestClient 已经添加到 WebTestClient 供测试使⽤用,这个注释会⾃自动应⽤用于@WebFluxTest 测试。
  • 增加了了⼀一个新的 ApplicationContextRunner 测试实⽤用程序,可以很容易易地测试你的⾃自动配置,我们已将⼤大部分内部测试套件移⾄至此新模型

引⼊入新的技术

支持 HTTP/2

HTTP/2 是第⼆二代的 HTTP 协议, Spring Boot 的 Web 容器器选择中 Tomcat, Undertow 和 Jetty 均已⽀支持HTTP/2。

相⽐比 HTTP/1.x, HTTP/2 在底层传输做了了很⼤大的改动和优化:

  • HTTP/2 采⽤用⼆二进制格式传输数据,⽽而⾮非 HTTP/1.x 的⽂文本格式。⼆二进制格式在协议的解析和优化扩展上带来更更多的优势和可能。
  • HTTP/2 对消息头采⽤用 HPACK 进⾏行行压缩传输,能够节省消息头占⽤用的⽹网络的流量量;⽽而 HTTP/1.x 每次请求,都会携带⼤大量量冗余头信息,浪费了了很多带宽资源;头压缩能够很好的解决该问题。
  • 多路路复⽤用,直⽩白的说就是所有的请求都是通过⼀一个 TCP 连接并发完成。 HTTP/1.x 虽然通过 pipeline 也能并发请求,但是多个请求之间的响应会被阻塞的,所以 pipeline ⾄至今也没有被普及应⽤用,⽽而 HTTP/2做到了了真正的并发请求。同时,流还⽀支持优先级和流量量控制。
  • Server Push:服务端能够更更快的把资源推送给客户端。例例如,服务端可以主动把 JS 和 CSS ⽂文件推送给客户端,⽽而不不需要客户端解析 HTML 再发送这些请求,当客户端需要的时候,它已经在客户端了。

嵌⼊入式 Netty 服务器器

由于 WebFlux 不不依赖于 Servlet API,我们现在可以⾸首次为 Netty 作为嵌⼊入式服务器器提供⽀支持,该 springboot-starter-webflux 启动 POM 将拉取 Netty 4.1 和 Ractor Netty。

注意:你只能将 Netty ⽤用作反应式服务器器,不不提供阻⽌止 Servlet API ⽀支持。

Kotlin

Spring Boot 2.0 现在包含对 Kotlin 1.2.x 的⽀支持

JOOQ 的⽀支持

JOOQ 是基于 Java 访问关系型数据库的⼯工具包。 JOOQ 既吸取了了传统 ORM 操作数据的简单性和安全性,⼜又保留留了了原⽣生 SQL 的灵活性,它更更像是介于 ORMS 和 JDBC 的中间层。对于喜欢写 SQL 的码农来说,JOOQ 可以完全满⾜足你控制欲,可以是⽤用 Java 代码写出 SQL 的感觉来。

支持 Quartz

Spring Boot 1.0 并没有提供对 Quartz 的⽀支持,之前出现了了各种集成⽅方案, Spring Boot2.0 给出了了最简单的集

成⽅方式。

响应式编程

WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。 Spring WebFlux 有⼀一个全新的⾮非堵塞的函数式 Reactive Web 框架,可以⽤用来构建异步的、⾮非堵塞的、事件驱动的服务,在伸缩性⽅方⾯面表现⾮非常好。

⾮非阻塞的关键预期好处是能够以⼩小的固定数量量的线程和较少的内存进⾏行行扩展。在服务器器端 WebFlux ⽀支持两种不不同的编程模型:

  • 基于注解的 @Controller 和其他注解也⽀支持 Spring MVC;
  • Functional 、 Java 8 Lambda ⻛风格的路路由和处理理。

Spring Boot 2.0 ⽀支持了了动态 Gif 的启动 Logo 打印

在 Spring Boot 1.0 项⽬目中 src/main/resources 路路径下新建⼀一个 banner.txt ⽂文件,⽂文件中写⼊入⼀一些字符,启动项⽬目时就会发现默认的 Banner 被替换了了,到了了 Spring Boot 2.0 现在可以⽀支持 Gif ⽂文件的打印, Spring Boot2.0 在项⽬目启动的时候,会将 Gif 图⽚片的每⼀一个画⾯面,按照顺序打印在⽇日志中,所有的画⾯面打印完毕后,才会启动 Spring Boot 项⽬目。

Thymeleaf 3.0 默认不不包含布局模块

Spring Boot 2.0 中 spring-boot-starter-thymeleaf 包默认并不不包含布局模块,使⽤用 Thymeleaf 对⻚页⾯面进⾏行行布局时,需要单独添加布局模块,如下:layout:decorator 标签在 3.0 过期,推荐使⽤用新的标签 layout:decorate 进⾏行行⻚页⾯面布局

<dependency> <groupId>nz.net.ultraq.thymeleaf</groupId> <artifactId>thymeleaf-layout-dialect</artifactId> </dependency>

发布了66 篇原创文章 · 获赞 129 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/Point9/article/details/103180071