SpringBoot2.0都更新了那些内容
导语
??在SpringBoot2.0中首先支持了动态Gif启动Logo的打印。在SpringBoot1.0的项目中src/main/resources 路径下新建一个banner.txt文件,文件中写入一些字符,在启动项目的时候会发现默认的Banner会被这个文件中的内容替换掉,到了SpringBoot 2.0 可以支持GIF动态文件的打印,SpringBoot在启动的时候,会将GIF图片的每一个动画画片按照顺序打印到日志中,所有的画面打印完成之后才会启动SpringBoot的项目。所以说在项目启动的Banner中添加一些东西是对产品以及团队的认同感。
文章目录
- 1.0升级到2.0API的变化
- 启动类SpringBootServletInitializer
- Spring Boot 2.0 默认不包含log4j,建议使用的slf4j
- Thymeleaf 3.0 默认不包含布局模块
- 配置文件
- WebMvcConfigurerAdapter过期
- Spring Boot JPA 变化
- 增加主键自增策略
- 分页组件变化
- 对于JPA关联查询更新
- 其他
- 总结
1.0升级到2.0API的变化 ??从SpringBoot1.0升级到2.0之后,有很多的API已经过时了,在使用的时候需要注意。
启动类SpringBootServletInitializer
SpringBoot 部署到Tomcat中去启动的时候需要启动类加载SpringBootServletInitializer,2.0和1.0的区别是在1.0中如下
import org.springframework.boot.web.support.SpringBootServletInitializer;
在2.0中如下
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
Spring Boot 2.0 默认不包含log4j,建议使用的slf4j
将
import org.apache.log4j.Logger;
protected Logger logger = Logger.getLogger(this.getClass());
改为
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
protected Logger logger = LoggerFactory.getLogger(this.getClass());
Thymeleaf 3.0 默认不包含布局模块
??在SpringBoot2.0 中spring-boot-starter-thymeleaf包默认不包括布局模块,使用Thymeleaf对页面进行布局的时候需要单独添加对应的依赖。
nz.net.ultarq.thymeleaf
thymeleaf-layout-dialect
layout:decorator标签在3.0的时候过期了,推荐使用的标签是layout:decorate进行页面布局。
配置文件
??大量的Servlet专属的server.* 配置被移动到了server.servlet.* 这个也就是为什么在配置项目路径的时候为什么会是以server.servlet开头的配置。
例如
老配置1.0 | 新配置2.0 |
---|---|
server.context-parameters.* | server.servlet.context-parameters. |
server.context-path | server.servlet.context-path |
WebMvcConfigurerAdapter过期
??在之前用户自定义的SpringMVC的配置都是通过继承者类来实现的,而这个类继承了WebMvcConfigurer接口
在1.0中的用法
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter
在2.0中的用法是
第一种用法是
public class MyWebMvcConfigurerAdapter implements WebMvcConfigurer
第二种
public class MyWebMvcConfigurerAdapter extends WebMvcConfigurationSupport;
Spring Boot JPA 变化
去掉xxxOne()方法
??在之前的用法中有findOne()方法其实就是根据传入的ID值找到对应的对象,在SpringBoot2.0de Respository 中可以添加findById(long id)来实现同样的功能。
例如
Person person = personRespository.findOne(long id)
改为手动在personRespository中添加findById()方法,在使用的时候将调用findOne方法改为调用findById
Person person = personResponsitory.findById(long id);
??delete()方法也被取消掉了,可以使用deleteById(long id),还有一点值得注意的就是这个方法的返回值为void。
Long deleteById(Long id)
【SpringBoot2.0都更新了那些内容】修改为
void deleteById(Long id)
当然为了适应上面两种变化通过下面的这种方式也可以解决上面的变化,就是自定义的SQL,但是这个方法并没有上面描述的方式这么实在来的方便,不建议使用
@Query("select * from Person where id = Id)
Person getPersonById(@Param("Id") Long id);
增加主键自增策略
??SpringBoot 需要指定主键的自增策略,这个与SpringBoot1.0 是有区别的,在1.0中会默认使用默认策略,但是在2.0如果不指定自增策略则会报错
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
分页组件变化
??在SpringBoot2.0的时候推荐使用的分页方式如下
Pageable pageable = PageRequest.of(page,size,Srot.by(Sort.Direction.ASC,"id"))
当然也可以使用其他的分页方式例如
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.3
对于JPA关联查询更新
??在SpringBoot1.0的时候,使用JPA的关联查询会创建一个接口对象来对于结果集作为中间缓存收集工作。
public interface Person{
Long getId();
Long getNumber();
String getName(};
??在1.0中如果没有查询到对应的字段返回为空,而在2.0中会直接报空指针异常,也就是说在2.0的时候对于查询返回结果检查更为严格。
其他
??在使用的时候还发现一些1.0与2.0之间的不同,例如在SpringBoot2.0创建SpringCloud基础项目的时候对于SpringCloud的支持,对于配置文件的支持等等,SpringBoot2.0还新增加了很多的启动器。可以更加方便的使用。但是这也带来一个很大的问题,就是版本不适配的问题。那么要不要升级呢?
是否升级操作
??在SpringBoot2.0中相对于1.0中新增加的东西还是蛮多的,并且更为重要的一点是SpringBoot2.0最低依赖的JDK版本是1.8版本,也就是说在SpringBoot2.0中可能使用了大量的JDK1.8的新特性。估计没有任何一个大型公司可以这么着急将所有产品都换成JDK1.8。很多的时候在一个大的版本更新之后难免会遇到一些Bug所以现在支持的Spring2.2.x等作为最新版本来说使用起来还是不是很稳定的,当然在官网上面可能推荐最新的稳定版本。可以尝试使用进行了解。
??Spring Boot 2.0 伴随着Spring5 来袭。标志着SpringBoot技术栈以及SpringCloud技术栈的成熟,同时,支持JDK1.8版本也标志这Java编程新时代的到来。
总结 ??SpringBoot2.0 的到来标志着在原来的基础上淘汰了一些API并且提供了很多新技术的支持,Spring技术栈正在不断的完善。在学习SpringBoot的同时也要注意Spring的变化,以及SpringBoot对于微服务的技术支持。在微服务火热的当下,希望大家可以更好的学习到一手的学习资料。
推荐阅读
- 这辈子我们都不要再联系了
- 遗憾是生活的常态,但孝顺这件事,我希望每一个人都不留遗憾
- 微习惯复盘
- 从蓦然回首到花开在眼前,都是为了更好的明天。
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- C语言中的时间函数clock()和time()你都了解吗
- 人生是什么(2015.9.8)
- 六月更新的......
- 布格日记——天赋
- 六一礼物