SpringBoot2.0都更新了那些内容

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/nihui123/article/details/100605292

导语
  在SpringBoot2.0中首先支持了动态Gif启动Logo的打印。在SpringBoot1.0的项目中src/main/resources 路径下新建一个banner.txt文件,文件中写入一些字符,在启动项目的时候会发现默认的Banner会被这个文件中的内容替换掉,到了SpringBoot 2.0 可以支持GIF动态文件的打印,SpringBoot在启动的时候,会将GIF图片的每一个动画画片按照顺序打印到日志中,所有的画面打印完成之后才会启动SpringBoot的项目。所以说在项目启动的Banner中添加一些东西是对产品以及团队的认同感。

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对页面进行布局的时候需要单独添加对应的依赖。

<dependency>
	<groudId>nz.net.ultarq.thymeleaf</groudId>
	<artifactId>thymeleaf-layout-dialect<artifactId/>
</dependency>

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

  原来在spring.http.* 或者是在spring.server.* 下的配置参数例如上传文件的参数,被修改到了spring.servlet.multipart下的配置。

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)

修改为

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"))

当然也可以使用其他的分页方式例如

 <!--分页插件-->
 <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper-spring-boot-starter</artifactId>
      <version>1.2.3</version>
 </dependency>

对于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对于微服务的技术支持。在微服务火热的当下,希望大家可以更好的学习到一手的学习资料。

猜你喜欢

转载自blog.csdn.net/nihui123/article/details/100605292