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或更高版本。

        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 时删除 empty starter dependencies。

        

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用中提到,校验包被独立成了一个starter组件,而2.3之前版本只需要引入 web 依赖就可以了。因此,在Spring Boot 1.X和2.X版本中,校验包的引入方式有所不同。 引用中指出,Spring Boot 1.X版本的配置的拦截器对静态资源是默认放行的,而Spring Boot 2.X版本的拦截器不会对静态资源默认放行,也会进行拦截。因此,在Spring Boot 2.X版本中如果想要使用静态资源,就需要排除静态资源的请求路径。 引用中提到了Spring Boot的基本特点,包括创建独立的Spring应用、嵌入Tomcat、Jetty或Undertow而无需部署它们、简化Maven配置、自动配置Spring应用、提供生产指标、健壮检查和外部化配置等等。 综上所述,Spring Boot 3和Spring Boot 2在校验包引入、拦截器对静态资源的处理和基本特点上可能存在一些差异。但具体差异需根据实际情况和版本变化进行具体分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot不同版本区别](https://blog.csdn.net/weixin_42604902/article/details/127439853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [springboot各个版本差异](https://blog.csdn.net/qq_40662086/article/details/119279467)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值