Spring Boot 2.0 都更新了什么java
2018 年 3 月 1 号 Spring Boot 2.0.0.RELEASE 正式发布,这是 Spring Boot 1.0 发布 4 年以后第一次重大修订,所以有多新功能和特性值得关注!在 Spring Boot 官方博客中咱们了解到:Spring Boot 2.0 版本经历了 17 个月的开发,有 215 个不一样的使用者提供了超过 6800 次的提交。web
咱们将 Spring Boot 2.0 更新的技术分为三类进行解读:spring
最低 JDK 8,支持 JDK 9,再也不支持 Java 6 和 7数据库
Spring Boot 2.0 要求 Java 8 做为最低版本,许多现有的 API 已更新,以利用 Java 8 的特性。例如,接口上的默认方法,函数回调以及新的 API,如 javax.time。若是你正在使用 Java 7 或更早版本,则在开发 Spring Boot 2.0 应用程序以前,须要升级你的 JDK。编程
Spring Boot 2.0 经过测试能够在 JDK 9 下正常运行,同时 Spring Boot 2.0 宣布再也不支持 Java 6 和 7,据我了解国内绝大部分互联网公司的基本环境还在 JDK 7 或者 6 环境下运行,考虑升级 Spring Boot 2.0 的团队须要考虑这个因素。数组
依赖组件升级缓存
Spring Boot 2.0 基于 Spring Framework 5 构建,本次 Spring Boot 的升级,同时也升级了部分其依赖的第三方组件,主要有如下几个:tomcat
HikariCP安全
默认链接池已从 Tomcat 切换到 HikariCP,HikariCP 是一个高性能的 JDBC 链接池,Hikari 是日语“光”的意思。服务器
HikariCP 号称是 Java 业界最快的数据库链接池,官网提供了 c3p0、dbcp二、tomcat、vibur 和 Hikari 等数据链接池的性能对比。
关于 Hikari 性能为何如此突出,官网给出的说明以下:
Security
Spring Security 是 Spring 社区的一个顶级项目,也是 Spring Boot 官方推荐使用的 Security 框架。除了常规的 Authentication 和 Authorization 以外,Spring Security 还提供了诸如 ACLs、LDAP、JAAS、CAS 等高级特性以知足复杂场景下的安全需求。
没有使用 Spring Boot 以前集成起来相对比较麻烦,而 Spring Boot 中基于 Java 配置实现 Spring Security 功能。Spring Boot 2.0 极大地简化了默认的安全配置,并使添加定制安全变得简单。
Spring Boot 2.0 很是容易使用 Spring Security 5.0 保护响应式应用,当检测到 Spring Security 存在的时候会自动进行默认配置。
OAuth 2.0
OAuth 2.0 是 OAuth 协议的延续版本,但不向后兼容 OAuth 1.0,即彻底废止了 OAuth1.0。OAuth 2.0 关注客户端开发者的简易性。要么经过组织在资源拥有者和 HTTP 服务商之间的被批准的交互动做表明用户,要么容许第三方应用表明用户得到访问的权限。
OAuth 2.0 是一个受权框架,或称受权标准,它可使第三方应用程序或客户端得到对 HTTP 服务上(如 Google、GitHub )用户账户信息的有限访问权限。OAuth 2.0 经过将用户身份验证委派给托管用户账户的服务以及受权客户端访问用户账户进行工做。
Spring Boot 2.0 将 Spring Security OAuth 项目迁移到 Spring Security。再也不提供单独的依赖包,Spring Boot 2.0 经过 Spring Security 5 提供 OAuth 2.0 客户端支持。
Micrometer
Micrometer 是一款监控指标的度量类库,可让你在没有供应商锁定的状况下对 JVM 的应用程序代码进行调整。
Spring Boot 2.0 加强了对 Micrometer 的集成,再也不提供本身的指标 API。依靠 micrometer.io 来知足全部应用程序监视需求。
Micrometer 包括尺寸指标的支持,当与尺寸监测系统配对时,尺寸指标能够有效访问特定的指定度量标准,而且能够在其尺寸范围内向下钻取。
指标能够输出到各类系统和开箱即用的 Spring Boot 2.0,为 Atlas、Datadog、Ganglia、Graphite、Influx、JMX、New Relic、Prometheus、SignalFx、StatsD 和 Wavefront 提供支持,另外还可使用简单的内存中度量标准。
集成后提供 JVM 指标(包括 CPU、内存、线程和 GC)、Logback、Tomcat、Spring MVC & 提供 RestTemplate。
Redis 默认使用 Lettuce
Redis 方面默认引入了 Lettuce,替代了以前的 Jedis 做为底层的 Redis 链接方式。
Lettuce 是一个可伸缩的线程安全的 Redis 客户端,用于同步、异步和反应使用。多个线程能够共享同一个 RedisConnection,它利用优秀 Netty NIO 框架来高效地管理多个链接,支持先进的 Redis 功能,如 Sentinel、集群、流水线、自动从新链接和 Redis 数据模型。
国内使用 Jedis 的居多,看来之后要多研究 Lettuce 了。
配置属性绑定
在 Spring Boot 2.0 中,使用 @ConfigurationProperties 的绑定机制被从新设计,限制了绑定规则,并修复了 Spring Boot 1.x 中的许多不一致的地方。
新的 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 类型和分隔字符串。
该 Duration 转换器容许在任一 ISO-8601 格式的持续时间,或是一个简单的字符串(如 10m,10 分钟)。现有的属性已更改成默认使用 Duration,该 @DurationUnit 注释经过设置若是没有指定所使用的单元确保向后兼容性。例如,Spring Boot 1.5 中须要秒数的属性如今必须 @DurationUnit(ChronoUnit.SECONDS) 确保一个简单的值,例如 10 实际使用的值为 10s。
分隔字符串转换容许你将简单绑定 String 到 Collection 或 Array 没必要分割逗号。例如,LDAP base-dn 属性用 @Delimiter(Delimiter.NONE),所以 LDAP DN(一般包含逗号)不会被错误解释。
Actuator 改进
在 Spring Boot 2.0 中 Actuator endpoints 有很大的改进,全部 HTTP Actuator endpoints 如今都在该 /actuator 路径下公开,而且生成的 JSON 有效负载获得了改进。
如今默认状况下不会暴露不少端点。若是你要从 Spring Boot 1.5 升级现有的应用,请务必查看迁移指南并特别注意该 management.endpoints.web.exposure.include 属性。
Spring Boot 2.0 改进了从许多端点返回的 JSON 有效负载。
如今许多端点都具备更精确地反映底层数据的 JSON。例如,/actuator/conditions 终端(/autoconfig 在 Spring Boot 1.5 中)如今有一个顶级 contexts 密钥来将结果分组 ApplicationContext。
测试
对 Spring Boot 2.0 中测试进行了一些补充和调整:
其余
还有一些小的调整和改进:
支持 HTTP/2
HTTP/2 是第二代的 HTTP 协议,Spring Boot 的 Web 容器选择中 Tomcat,Undertow 和 Jetty 均已支持 HTTP/2。
相比 HTTP/1.x,HTTP/2 在底层传输作了很大的改动和优化:
嵌入式 Netty 服务器
因为 WebFlux 不依赖于 Servlet API,咱们如今能够首次为 Netty 做为嵌入式服务器提供支持,该 spring-boot-starter-webflux 启动 POM 将拉取 Netty 4.1 和 Ractor Netty。
注意:你只能将 Netty 用做反应式服务器,不提供阻止 Servlet API 支持。
Kotlin 的支持
Spring Boot 2.0 如今包含对 Kotlin 1.2.x 的支持,并提供了 runApplication,一个使用 Kotlin 运行 Spring Boot 应用程序的方法。咱们还公开和利用了 Kotlin 对其余 Spring 项目(如 Spring Framework,Spring Data 和 Reactor)已添加到其最近版本中的支持。
JOOQ 的支持
JOOQ 是基于 Java 访问关系型数据库的工具包。JOOQ 既吸收了传统 ORM 操做数据的简单性和安全性,又保留了原生 SQL 的灵活性,它更像是介于 ORMS 和 JDBC 的中间层。对于喜欢写 SQL 的码农来讲,JOOQ 能够彻底知足你控制欲,能够是用 Java 代码写出 SQL 的感受来。
支持 Quartz
Spring Boot 1.0 并无提供对 Quartz 的支持,以前出现了各类集成方案,Spring Boot 2.0 给出了最简单的集成方式。
响应式编程
WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring WebFlux 有一个全新的非堵塞的函数式 Reactive Web 框架,能够用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现很是好。
非阻塞的关键预期好处是可以以小的固定数量的线程和较少的内存进行扩展。在服务器端 WebFlux 支持两种不一样的编程模型:
默认状况下,Spring Boot 2.0 使用 Netty WebFlux,由于 Netty 在异步非阻塞空间中被普遍使用,异步非阻塞链接能够节省更多的资源,提供更高的响应度。经过比较 Servlet 3.1 非阻塞 I/O 没有太多的使用,由于使用它的成本比较高,Spring WebFlux 打开了一条实用的通路。
使用 Spring WebFlux/WebFlux.fn 提供响应式 Web 编程支持,WebFlux 是一个全新的非堵塞的函数式 Reactive Web 框架,能够用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现很是好,此功能来源于 Spring 5.0。
Spring Boot 2.0 也提供了对响应式编程的自动化配置,如 Reactive Spring Data、Reactive Spring Security 等。