springboot各个版本差异
这部分被⾯试官问到了,各个版本差异。
Spring Boot基本上是Spring框架的扩展,它消除了设置Spring应⽤程序所需的XML配置,为更快,更⾼效的开发⽣态系统铺平了道路。以下是Spring Boot中的⼀些特点:
1:创建独⽴的spring应⽤。
2:嵌⼊Tomcat, Jetty Undertow ⽽且不需要部署他们。
3:提供的“starters” poms来简化Maven配置
4:尽可能⾃动配置spring应⽤。
5:提供⽣产指标,健壮检查和外部化配置
6:绝对没有代码⽣成和XML配置要求
springboot1.0和springboot2.0
1.WebMvcConfigurerAdapter这个抽象类已经过时。因为SpringBoot的
2.0 及其以上版本最低⽀持Java 8,⽽Java 8 中有个新特性就是default关键字。
因为Java8⾥⾯对于接⼝可以写默认⽅法所以对WebMvcConfigurerAdapter的上层接⼝WebMvcConfigurer进⾏了改进,将⾥⾯的所以⽅法改成了默认⽅法,但⽆实现。我们可以直接继承WebMvcConfigurer 接⼝然后实现他的default⽅法即可。
WebMvcConfigurerAdapter 可以⽤ WebMvcConfigurationSupport 替代,但是不推荐使⽤WebMvcConfigurationSupport这个类会全⾯接管对SpringMVC的配置,即SpringBoot对SpringMVC的⾃动配置全部失效,只使⽤⽤户对SpringMVC的配置。
2.SpringBoot1.X 配置的对静态资源是默认放⾏的,⽽SpringBoot 2.X版本的不会对静态资源默认放⾏,也会进⾏拦截。如果想要使⽤静态资源就必须排除静态资源的请求路径。
springboot2.1
1.优化应⽤程序启动速度,启动时占⽤的内存更少。在Spring Data JPA中设置spring.data. JPA . repositori.bootstrap
.bootstrap-mode=deferred时,Hibernate将在单独的线程启动,⽽应⽤程序的其余组件将会并⾏启动。
2.⽀持Java11并且兼容Java8。
3.提供了应⽤程序缓存管理信息和提供Spring集成组件的图表信息。
springboot2.2
1.Spring Boot
2.2.0 的性能获得了很⼤的提升。现在,应⽤程序启动速度更快,并且消耗的内存更少。这在具有⾮常严格的内存约束的环境中特别有⽤。
2.现在可以通过 spring.main.lazy-initialization 属性启⽤全局延迟初始化,以减少启动时间。但是在进⾏任何延迟的初始化
时,HTTP 请求的处理可能需要更长的时间;通常在启动时会发⽣的故障现在在启动后才会出现。
3.⽀持 Java 13,同时仍与 Java 11 和 8 兼容
4.配置属性现在⽀持基于构造函数的绑定,该绑定使 @ConfigurationProperties 注释的类不可变。可以通过使⽤
@ConstructorBinding 注释 @ConfigurationProperties 类或其构造函数之⼀来启⽤基于构造函数的绑定。可以在配置属性绑定提供的构造函数参数上使⽤ @DefaultValue 和 @DateTimeFormat 之类的注释。
springboot2.3
1.正常(优雅)停机
什么是正常(优雅)停机?
所有四个嵌⼊式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应⽤程序均⽀持正常关机。它作为关闭应⽤程序上下⽂的⼀部分发⽣,并在停⽌SmartLifecyclebean 的最早阶段执⾏。此停⽌处理使⽤⼀个超时,该超时提供⼀个宽限期,在此宽限期内,现有请求将被允许完成,但新请求将不被允许。不允许新请求的确切⽅式因所使⽤的Web服务器⽽异。Jetty,Reactor Netty和Tomcat将停⽌在⽹络层接受请求。Undertow将接受请求,但会⽴即以服务不可⽤(503)响应进⾏响应。
当我们流量请求到此接⼝执⾏业务逻辑的时候,若服务端此时执⾏关机 (kill),spring boot 默认情况会直接关闭容器(tomcat 等),导致此业务逻辑执⾏失败。在⼀些业务场景下:会出现数据不⼀致的情况,事务逻辑不会回滚。使⽤Tomcat正常关机需要Tomcat 9.0.33或更⾼版本。
springboot框架的作用2.分成jar包
重新打包的jar 分别在BOOT-INF/classes和中包含应⽤程序的类和依赖项BOOT-INF/lib。对于需要从jar的内容中构建docker映像的情况,能够进⼀步分隔这些⽬录,以便可以将它们写⼊不同的层是很有⽤的。
Buildpacks 打镜像包会使⽤缓存的,如果这⼀层没变那就不⽤重新打这⼀层,只需要重新打包修改过的层,这样⼀来,如果你只修改了application 中的内容,⽐如新加了 Controller 或者配置⽂件等,那么只需要重新打包这⼀层,也就是⼏ K,⼏⼗K 不会很⼤,这样⼀来打包速度就很快了,要不然⼀个上百兆的镜像包也得需要⼀段时间。
springboot2.4
1.⾃动分析瘦⾝
Spring Boot 项⽬最终构建处理 JAR 包⼤⼩⼀直是个诟病,需要把所有依赖包内置最终输出可运⾏的 jar。 当然可以使⽤其他的插件扩展 实现依赖 JAR 和 可运⾏ jar 分离可以参考 slot-maven-plugin, 但此种⽅法治标不治本并不能减少原有依赖的 JAR 的⼤⼩。
Spring Boot 2.4 提供对构建输出 JAR 分析⾃动瘦⾝的功能,⾃动在构建输出可运⾏ JAR 时删除 empt
y starter dependencies。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论