186. Spring Boot 2.0发布:番外篇
需求缘起:
在上一周发布了文章《Spring Boot 2.0终于正式发布》,但是看完总感觉少了点什么。^_^,是少加糖了,没甜到你心里去,好了,希望本篇文章可以走进你心里去,知道2.0到底可以给我带来什么。接下来就是见证奇迹的时刻了:
一、JDK的版本
Spring Boot 2.0要求Java 8作为最低版本,同时支持Java 9 。
画外音:要想升级到Spring Boot 2.0的化,就要升级jdk到1.8的版本了,不然可能就无法正常运行了,另外就是升级到jdk 1.8的话,那么就可以享受1.8带来的特性了。
那么对于1.8和1.9的java给我们带来什么新特性呢?
1.1 JDK1.8的新特性
这里简单说明几点:
(1)接口中支持默认方法和静态方法:
在jdk1.8之前,在接口中的方法都是抽象无法,是不允许有实现了,jdk1.8就支持实现了。
(2)函数式接口和Lambda表达式:
函数式接口(Functional Interface)是只包含一个方法的抽象接口。
在Java 8中通过@FunctionalInterface注解,将一个接口标注为函数式接口,该接口只能包含一个抽象方法。
@FunctionalInterface注解不是必须的,只要接口只包含一个抽象方法,虚拟机会自动判断该接口为函数式接口。一般建议在接口上使用@FunctionalInterface注解进行声明,以免他人错误地往接口中添加新方法,如果在你的接口中定义了第二个抽象方法的话,编译器会报错。函数式接口是为Java 8中的lambda而设计的,lambda表达式的方法体其实就是函数接口的实现。
“lambda表达式”是一段可以传递的代码,因为他可以被执行一次或多次。
(3)StreamAPI:
Stream是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。可以指定你希望对 集合进行的操作,可以执行非常复杂的查找、过滤和映射数据等操作。
(4)新的日期和时间 API:
Java8 引入了一个新的日期和时间API,位于java.time包下。
Java8中有两大最为重要的改变。第一个是 Lambda 表达式 ;另外一 个则是Stream API(java.util.stream.*)。
具体怎么玩转jdk1.8,此博客就不详细展开了。
关于1.8的特性了解可以参考:
《写给大忙人看的Java SE8》——Java8新特性总结:
https://www.cnblogs.com/justcooooode/p/7701260.html
JAVA8新特性[第四季]-强大的Stream API:
http://blog.csdn.net/liudongdong0909/article/details/77429875
画外音:spring boot 2.0最低版本使用的是jdk 1.8的,那么也就是你可以使用jdk 1.8的新特性来改进和优化你的代码了。
1.2 JDK1.9的新特性
Jdk1.9看起来也是做了很大的升级,这里不展开说明,^_^,博主1.8还没玩明白呢,要想了解1.9新特性的可以参考:
Java 9 逆天的十大新特性:
http://blog.csdn.net/mxw2552261/article/details/79080678
二、第三方库升级
SpringBoot 2.0建立在Spring Framework 5之上,升级第三方库到最新的稳定版本,比如:Tomcat 8.5、Flyway 5、Hibernate 5.2、Thymeleaf 3。
这里我们说明下Thymeleaf3:
(1)Thymeleaf3是否是spring boot 2.0才支持的?
非也,非也,在spring boot 1.4的版本升级中,有这么一段话:
By default, Spring Boot uses Thymeleaf2.1 but it is now compatible with Thymeleaf 3 as well, check the updateddocumentation for more details.
意思就是:默认情况下,Spring Boot使用的是Thymeleaf 2.1的版本,但是现在也能够兼容Thymeleaf 3的版本了。
画外音:spring boot在1.4的时候就兼容了Thymeaf 的版本,只是默认情况下使用的是2.1的版本而已。
对于使用的是1.x的版本的,如果要使用Thymeaf的话,那么可以参考之前的一篇博客,《77. Spring Boot Use Thymeleaf 3【从零开始学SpringBoot】》:
http://412887952-qq-com.iteye.com/blog/2315193
画外音:在spring boot 1.4以上,spring boot 2.0以下,如果要使用Thymeaf 3的需要简单的配置才能支持;如果是spring boot 2.0的版本的话,只需要引入相应的starter即可支持了。
(2)Thymeleaf3的特性?
这里重要说一点的是,完整HTML5标志支持:Thymeleaf3.0 不再是基于XML结构的。由于引入新的解析引擎,模板的内容格式不再需要严格遵守XML规范。即不在要求标签闭合,属性加引号等等。当然,出于易读性考虑,还是推荐你按找XML的标准去编写模板。2.0版本的<hr>是会报错的,3.0之后<hr>就可以正常访问了。(博主这个特性特意测试了下,通过)。
画外音:在Thymeleaf 3版本中,标签没有闭合也是可以正常运行了。
另外一些特性,在《77. Spring Boot Use Thymeleaf 3【从零开始学Spring Boot】》博客中也有略微提及,大家看这篇博客进行了解,这里就过多介绍了。
三、Quartz支持
还记得之前的博客,在集成Quartz花费了不少功夫呢,现在好了,spring boot就直接支持了,只要添加如下依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
之后就可以享受quartz带来的功能了。自从了quartz,妈妈在也不担心,我不能按时回家吃饭了。
四、响应式编程
为各种组件的响应式编程提供了自动化配置,如:Reactive Spring Data、Reactive Spring Security。那么什么是响应式编程呢?
响应式编程(Reactive Programming),简称RP:响应式编程就是异步数据流编程。什么是流呢?任何事物都可以当做给一个流:变量、用户输入、属性、缓存,数据结构等。有点像Java中对象的定义:万事万物皆是对象。比如,系统中的添加文章就是一个单击事件一样的数据流,你能够监听这个流,并做出响应。
具体这块的概念性的东西比较复杂,一方面大家可以找点资料了解下,另外一方面如果允许的话,也会在之后的博客中进行介绍。
对于Spring Boot 2.0的新特性,还有很多,这里介绍的是重要的部分,也是可能和大家比较有关联的地方。
问题一:升级到Spring Boot 2.0
对于要从Spring Boot 1.x升级到SpringBoot 2.0的话,官方是建议先升级到Spring Boot 1.5的版本,然后再升级到2.0的版本。对于是否要升级到2.0的话,还是要看当下的项目,当下已经在线上的项目,如果未使用2.0的特性的话,是可以保留在1.x的版本的。对于如果是新的项目,建议还是升级到2.0版本,因为这里不仅使用了jdk 1.8,而且还有这么多特性,这样有助于之后版本的升级。
问题二: 学习Spring Boot
对于很多新手而言的话,对于Spring Boot还是不是很了解的,另外现在大部分的文章都是使用1.x的版本,那么对于初学者的话,是选择2.0学习,还是1.x的学习呢?这里建议:如果能够自行学习的,可以直接选择2.0版本进行学习,如果确实有困难的,选择1.x的进行学习。对于使用1.x学习的,学习好之后,过渡到2.0版本是很轻松简单的事情。因为通过这两篇文章的介绍,Spring Boot 2.0并不是彻底改了编码方式,只是进行升级和优化而已,所以不用担心,学习了1.x版本之后,2.0还得重新了解一遍。这是一些小建议而已,具体根据自己的情况进行学习。
问题三: 博主写博客会使用哪个版本?
目前博客中会使用Spring Boot 1.5的版本和Spring Boot 2.0的版本进行讲解,对于Spring Boot 2.0的话,之后会介绍新特性;对于1.5的版本在写一些文章的时候,会使用此版本,具体会根据实际情况,进行选择合适的版本进行说明,在每篇文章中,如果使用到了Spring Boot的话,会注明所使用的版本号。
购买完整视频,请前往:http://www.mark-to-win.com/TeacherV2.html?id=287