Spring Boot 2.0(一):【重磅】Spring Boot 2.0权威发布
就在今天 Spring Boot2.0.0.RELEASE
正式发布,今天早上在发布 Spring Boot2.0 的时候还出现一个小插曲,将 Spring Boot2.0 同步到 Maven 仓库的时候出现了错误,然后 Spring Boot 官方又赶紧把 GitHub 上发布的 v2.0.0.RELEASE 版本进行了撤回。到了下午将问题修复后,又重新进行了上传,至此 Spring Boot2.0 正式推出!
要知道这是 Spring Boot1.0 发布 4 年之后第一次重大修订,因此有多的新功能和特性值得大家期待!在 Spring Boot 官方博客中我们了解到:Spring Boot2.0 版本经历了 17 个月的开发,有 215 个不同的使用者提供了超过 6800 次的提交,并表示非常感谢提供贡献的每一位用户,和所有对这些里程碑版本提供重要反馈的早期采用者。
熟悉 Spring Boot/Cloud 的技术者们都知道,Spring Boot 依赖于 Spring,而 Spring Cloud 又依赖于 Spring Boot,因此 Spring Boot2.0 的发布正式整合了 Spring5.0 的很多特性,同样后面 Spring Cloud 最新版本的发布也需要整合最新的 Spring Boot2.0 内容。
新版本特性
新版本值得关注的亮点有哪些:
基于 Java 8,支持 Java 9
也就是说 Spring Boot2.0 的最低版本要求为 JDK8,据了解国内大部分的互联网公司系统都还跑在 JDK1.6/7 上,因此想要升级到 Spring Boot2.0 的同学们注意啦,同时支持了 Java9,也仅仅是支持而已。
响应式编程
使用 Spring WebFlux/WebFlux.fn 提供响应式 Web 编程支持, Webflux 是一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好,此功能来源于 Spring5.0。
Spring Boot2.0 也提供对响应式编程的自动化配置,如:Reactive Spring Data、Reactive Spring Security 等
HTTP/2 支持
在 Tomcat, Undertow 和 Jetty 中均已支持 HTTP/2
对 Kotlin 支持
引入对 Kotlin 1.2.x 的支持,并提供了一个 runApplication 函数,让你通过惯用的 Kotlin 来运行 Spring Boot 应用程序。
全新的执行器架构
全新的执行器架构,支持 Spring MVC, WebFlux 和 Jersey
支持 Quartz
Spring Boot1.0 并没有提供对 Quartz 的支持,之前出现了各种集成方案,Spring Boot2.0 给出了最简单的集成方式。
Security
大大的简化了安全自动配置
Metrics
Metrics 方面,Spring Boot 2 引入了 Micrometer,来统一 metrics 的规范,使得开发人员更好的理解和使用 metrics 的模块,而不需要关心对接的具体存储是什么。
监控方面
Spring Boot 2 增强了对 Micrometer 的集成。RabbitMQ、JVM 线程和垃圾收集指标会自动进行 instrument 监控,异步控制器 (controller) 也会自动添加到监控里。通过集成,还可以对 InfluxDB 服务器进行监控。
数据方面
- db 方面,默认引入了 HikariCP,替代了之前的 tomcat-pool 作为底层的数据库连接池, 对比于 tomcat-pool, HikariCP 拥有更好的性能,总而言之就是提高了 db 的访问速度
- JOOQ 的支持
- Redis 方面, 默认引入了 Lettuce, 替代了之前的 jedis 作为底层的 redis 链接方式
- MongoDB\Hibernate 优化
Thymeleaf 3
Spring Boot 2 支持了 Thymeleaf 3,Thymeleaf 3 相对于 Thymeleaf 2 性能提升可不是一点点,因为 2.0 的性能确实不咋地,同时也使用了新的页面解析系统。
OAuth 2.0
同时也加入了 对于 OAuth 2.0 的支持, 使得开发人员更加友好的使用 spring-security 来完成权限模块的开发
依赖组件的更新
- Jetty 9.4
- Tomcat 8.5
- Flyway 5
- Hibernate 5.2
- Gradle 3.4
- Thymeleaf 3.0
最后还有一个小彩蛋,Spring Boot2.0 支持了动态 gif 的启动 logo 打印.
技术名词解释
Spring 现在作为 Java 开源界的老大,它的一举一动都影响着行业的技术方向,在这次发布的 Release Notes 中发现有很多的技术都还没有了解过,也分享出来:
WebFlux 是什么?
WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。
非阻塞的关键预期好处是能够以小的固定数量的线程和较少的内存进行扩展。在服务器端 WebFlux 支持 2 种不同的编程模型:
- 基于注解的 @Controller 和其他注解也支持 Spring MVC
- Functional 、Java 8 lambda 风格的路由和处理
默认情况下,Spring Boot 2 使用 Netty WebFlux,因为 Netty 在异步非阻塞空间中被广泛使用,异步非阻塞连接可以节省更多的资源,提供更高的响应度。通过比较 Servlet 3.1 非阻塞 I / O 没有太多的使用,因为使用它的成本比较高,Spring WebFlux 打开了一条实用的通路。
值得注意的是:支持 reactive 编程的数据库只有 MongoDB, redis, Cassandra, Couchbase
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 再发送这些请求。当客户端需要的时候,它已经在客户端了。
JOOQ
JOOQ 是基于 Java 访问关系型数据库的工具包。JOOQ 既吸取了传统 ORM 操作数据的简单性和安全性,又保留了原生 sql 的灵活性,它更像是介于 ORMS 和 JDBC 的中间层。对于喜欢写 sql 的码农来说,JOOQ 可以完全满足你控制欲,可以是用 Java 代码写出 sql 的感觉来。
Lettuce
Lettuce 是一个可伸缩的线程安全的 Redis 客户端,用于同步,异步和反应使用。 多个线程可以共享同一个 RedisConnection。它利用优秀 netty NIO 框架来高效地管理多个连接。 支持先进的 Redis 功能,如 Sentinel,集群,流水线,自动重新连接和 Redis 数据模型。
国内使用 Jedis 的居多,看来以后要多研究研究 Lettuce 了。
HikariCP
HikariCP 是一个高性能的 JDBC 连接池。Hikari 是日语“光”的意思。可能是目前 java 业界最快的数据库连接池。
Flyway
Flyway 是独立于数据库的应用、管理并跟踪数据库变更的数据库版本管理工具。用通俗的话讲,Flyway 可以像 SVN 管理不同人的代码那样,管理不同人的 sql 脚本,从而做到数据库同步。
Gson
Gson 是 google 解析 Json 的一个开源框架, 同类的框架 fastJson,JackJson 等等
看完 Spring Boot 2.0 Release Notes ,发现又有很多不知道的新技术了,以后有的学了
是否选择升级
通过以上内容可以看出 Spring Boot2.0 相对于 1.0 增加了很多新特性,并且最重要的是 Spring Boot2.0 依赖的 JDK 最低版本是 1.8,估计国内大多互联网公司还么这么激进。另外一个新的重大版本更新之后,难免会有一些小 Bug 什么的,往往需要再发布几个小版本之后,才会慢慢稳定下来。
因此我的建议是,如果不是特别想使用 Spring Boot2.0 上面提到的新特性,就尽量不要着急进行升级,等 Spring Boot2.0 彻底稳定下来后再使用。如果想要升级也请先从早期的版本升级到 Spring Boot1.5X 系列之后,再升级到 Spring Boot2.0 版本,Spring Boot2.0 的很多配置内容和 Spring Boot1.0 不一致需要注意。
Spring Boot1.0 发布之后给我们带来了全新的开发模式,Spring Boot2.0 发布标志着 Spring Boot 已经走向成熟,对 Java 界带来的变革已经开启!
写在最后
前两天在看池建强老师文章时,发现老师刚好也介绍了 Spring Boot2.0,其中有这么一个观点:Java 语言为什么能够长期占据编程兵器排行榜第一名的位置呢?因为命好。
Java 能长盛不衰,主要是命好。每当人们觉得 Java 不行了的时候,总会有英雄横刀救美。
最初 Java 开发出来不知道有什么用的时候,发现可以用 Applet 在网页上做动画。后来企业级软件开发时代 JavaEE 大行其道,开源社区 Spring 桃李满天下。等到了移动时代,人们觉得 Java 要完蛋了,Google 拍马救市,收购并开放了 Android 平台,当家语言就是 Java,于是 Java 再次焕发勃勃生机。目前大数据领域,Java 同样是当仁不让的好手。
现在 Spring Framework 那套东西使用了十几年,正当大家被长达几千行的 ApplicationContext 配置文件折磨的死去活来的时候,Spring Boot 诞生了。什么是 Spring Boot?用来简化 Spring 应用程序开发的。
换句话说就是,当你觉得 Java 不好用的时候,我做了个轻量级的 S,让你好好用 Java。等你觉的 S 也不够轻了,我做了个 SB,让你觉得 S 还是挺轻的。
从 2002 年 Rod Johnson 的interface21
到如今的Spring Boot2.0
,Spring 走过了 16 年的春秋,经历了 N 多的贡献者,Spring 也从一个小小的开源框架,发展成 Java 领域最成功的开源软件没有之一!同时做为一名 Java 开发从业者,也特别的感谢 Spring 这类的开源组织,为推动企业级开发做了巨大的贡献,全世界的 Java 开发者都是它的受益者!
向 Spring 致敬,向开源致敬!
参考
Spring Boot 2.0 Release Notes
Spring Boot 2.0 goes GA
Spring Boot 2.0 同步至 Maven 仓库出错,已撤回……