Spring Boot 3.0系列【1】开篇之Spring Boot 3.0 版本新特性

news2024/9/23 7:29:22

有道无术,术尚可求,有术无道,止于术。

本系列Spring Boot版本:3.0.3

文章目录

    • 导读
    • Spring Boot 简介
      • 简要发展史
      • 核心功能
    • Spring Boot 3.0 新特性
      • JDK 版本要求(重点)
      • GraalVM 本地镜像支持(重点)
      • GraalVM 和 Native 构建工具版本要求
      • 第三方库升级
      • Log4j2 功能增强
      • @ConstructorBinding改进
      • Micrometer 更新
      • Prometheus 支持
      • 更灵活的 Spring Data JDBC自动配置
      • Kafka 启用异步确认
      • Elasticsearch Java 客户端
      • JdkClientHttpConnector 的自动配置
      • @SpringBootTest 支持 main 方法
      • 调整和改进
      • 过时

导读

本系列基于最新Spring Boot 3.0版本,由浅入深,从实战到源码分析,详细讲解各种Spring Boot 的使用技巧,适用于初学和进阶使用者。

因为是基于Spring Boot 3.0,所以会先讲解大家比较关注的3.0 新特性,初学者可以跳过前两篇相关内容。

本系列学习路线:
在这里插入图片描述

Spring Boot 简介

GitHub地址
官方网站

Spring Boot 3.0 是否可用于生产环境:目前不可,一般更新大版本的框架,建议彻底稳定了再上生产。

简要发展史

Spring Boot可以快速简便的构建应用,在当前微服务"泛滥"的时代,已经成为开发人员必须掌握的一项技术😉😉😉。

Spring框架于2004年3月24日,发布了1.0正式版,它是由罗德·约翰逊创建的一个轻量级开源框架。

在此之前,开发一个企业应用项目是是比较复杂的,比如使用EJBSpring框架通过控制反转面向切面编程的思想进行更轻松的企业应用开发,取代了EJB臃肿、低效的开发模式。

Spring早期都基于XML配置,也是比较繁琐,后期实现了基于注解开发模式,逐渐成为了JAVA开发的首选框架,但是也并没有做到开箱即用,没有最大限度的减轻不必要的开发工作。

2013年,Pivotal团队开始研发Spring Boot,在原有Spring框架的基础进一步简化了Spring应用的初始搭建以及开发过程。于2014年4月正式推出了1.0版本,2018年3月发布 2.0版本,2022年11月发布 3.0版本。
在这里插入图片描述

核心功能

翻译一下官网给出的功能特性并简单解读:

1、Create stand-alone Spring applications

可以快速的创建一个独立的Spring 应用。相对于需要自己创建工程、引入依赖、添加配置等重复的开发工作,使用Spring Boot只需输入项目名、版本号等信息,就可以快速创建一个可以直接进行业务开发的工程。

2、Embed Tomcat, Jetty or Undertow directly (no need to deploy WAR files)

内嵌TomcatJetty Undertow Web服务器,不再需要我们将程序打包成war包,手动部署到Web服务器中。

3、Provide opinionated ‘starter’ dependencies to simplify your build configuration

提供各种starter依赖包,简化构建配置。使用哪个框架,只需引入对应的starter包即可,无需再需要自己写配置类、加载类等。

4、Automatically configure Spring and 3rd party libraries whenever possible

自动配置Spring及第三方库,只需少量配置就能完成相应的功能,开箱即用。

5、Provide production-ready features such as metrics, health checks, and externalized configuration

提供生产级别的监控、健康检查及外部化配置。可以提供检测程序内存、硬盘、CPU等功能。

6、Absolutely no code generation and no requirement for XML configuration

没有代码生成,也不需要编写XML配置。不再使用繁琐的XML配置,使用基于注解的方式。

Spring Boot 3.0 新特性

Spring Boot版本发布速度很快,而且从发布日期开始,基本都只支持维护一年时间。。。当发布新版本时,可以通过版本发布说明查看版本升级变化。

这里只简单介绍 3.0 新特性,具体用法后面会用代码详细解读。

JDK 版本要求(重点)

3.0需要Java 17作为最低版本。如果当前正在使用Java 8Java 11,在开发Spring Boot 3.0应用程序之前,需要升级JDK,对于Java 19也进行了测试并运行正常。

注:Java 17在最近几年会成为主流开发版本。

GraalVM 本地镜像支持(重点)

Spring Boot 3.0应用程序可以构建为GraalVM本地镜像,大幅度减少内存消耗,加快启动速度。

注: GraalVM技术虽然目前还不够成熟,但在将来以其高性能、低内存、启动快的优点,JAVA才能在云原生时代站位脚跟。

GraalVM 和 Native 构建工具版本要求

GraalVM 22.3或更高版本
Native Build Tools插件:0.9.17或更高版本

第三方库升级

此处只列举一些常用的。

Spring框架相关的库:

  • Spring Framework 6
  • Spring AMQP 3.0
  • Spring Security 6.0
  • Spring Data 2022.0

Java EE升级为Jakarta EE,尽可能选择Jakarta EE兼容的依赖项,包括:

  • Jakarta Activation 2.1
  • Jakarta JMS 3.1
  • Jakarta JSON 2.1
  • Jakarta JSON Bind 3.0

其他第三方库最新稳定版本:

  • Elasticsearch Client 8.5
  • Hibernate 6.1
  • Jackson 2.14
  • Logback 1.4
  • OkHttp 4.10
  • Tomcat 10

Log4j2 功能增强

更新Log4j2新功能:

  • 多环境支持

  • 环境属性查询

  • 系统属性

有关详细信息,请参阅官网。

@ConstructorBinding改进

当使用@ConfigurationProperties注解进行属性绑定时,如果类只有一个构造器,则可以省略注解,不需要标注在构造器上。如果有多个构造函数,仍然需要使用@ConstructorBinding来告诉Spring Boot使用哪一个。

Micrometer 更新

Micrometer Spring Boot中集成的一个应用检测度量框架,Spring Boot 3.0支持Micrometer 1.10中引入的新观测API,并支持Micrometer TracingMicrometer OtlpMeterRegistry的自动配置。

Prometheus 支持

Prometheus 是一个开源的系统监视和警报工具,Spring Boot 3.0对其Exemplars进行自动配置,以及推送网关可以配置在关机时执行PUT

更灵活的 Spring Data JDBC自动配置

Spring Data JDBC所需的几个自动配置的bean现在是有条件的,可以通过定义相同类型的bean来替换。现在可以替换的bean类型如下:

  • org.springframework.data.jdbc.core.JdbcAggregateTemplate
  • org.springframework.data.jdbc.core.convert.DataAccessStrategy
  • org.springframework.data.jdbc.core.convert.JdbcConverter
  • org.springframework.data.jdbc.core.convert.JdbcCustomConversions
  • org.springframework.data.jdbc.core.mapping.JdbcMappingContext
  • org.springframework.data.relational.RelationalManagedTypes
  • org.springframework.data.relational.core.dialect.Dialect

Kafka 启用异步确认

一个新的配置属性spring.kafka.listener.async-acks,用于配置Kafka启用异步ack。该属性仅在spring.kafka.listener.async-mode配置为manual 或者manual-immediate时适用。

Elasticsearch Java 客户端

引入新的Elasticsearch Java客户端 自动配置,可以使用现有的spring.elasticsearch.*进行属性配置。

JdkClientHttpConnector 的自动配置

在缺少Reactor NettyJetty的反应式客户端和Apache HTTP客户端的情况下,JdkClientHttpConnector现在将自动配置。WebClientJDKHttpClient可以一起使用。

@SpringBootTest 支持 main 方法

@SpringBootTest 注解新增userMainMethod属性,配置为useMainMethod可以调用Spring Boot应用入口的main方法。

调整和改进

除了上面列出的更改外,还进行了一些小的调整和改进,包括:

  • 在应用程序启动期间不再记录主机名,有助于缩短启动时间的网络查找。
  • JDK中弃用JavaSecurityManager之后,对它的支持已被删除。
  • Spring FrameworkCommonsMultipartResolver的支持在Spring Framework 6中被删除。
  • spring.mvc.ignore-default-model-on-redirect配置已被弃用,以与上游的Spring Framework更改保持一致。
  • WebJars资源处理程序路径模式可以使用spring.mvc.webjars-path-pattern或者spring.webflux.webjars-path-pattern来配置。
  • 可以使用server.tomcat.remoteip.trusted-proxies配置Tomcat远程IP信任代理。
  • 可以通过定义ValidationConfigurationCustomizer 来定制Validation配置。
  • Log4j2Log4jBridgeHandler现在用于将基于JUL的日志路由到Log4j2,而不是通过SLF4J
  • 实现MeterBinder接口的Bean现在仅在所有单例Bean初始化后绑定到容器中。
  • BraveOpenTelemetrySpanCustomizer 现在已自动配置。
  • Micrometer 中的JvmCompilationMetrics现在已自动配置。
  • DiskSpaceHealthIndicator现在在其日志消息中包含其路径及其运行状况详细信息。
  • DataSourceBuilder现在可以从包装的DataSource派生。
  • 可以使用spring.data.mongodb.additional-hostsMongoDB配置多个主机和其他主机属性。
  • ElasticsearchsocketKeepAlive属性可以使用spring.elasticsearch.socket-keep-alive属性进行配置。
  • 当使用spring-rabbit-stream时,RabbitStreamTemplateEnvironment将自动配置,无论spring.rabbitmq.listener.type 是否配置为stream
  • 可以使用spring.kafka.admin.modify-topic-configs属性修改现有的Kafka Topic
  • WebDriverScopeWebDriverTestExecutionListener已公开,以便于在自定义测试设置中使用WebDriver

过时

  • @ConstructorBinding已从org.springframework.boot.context.properties移动到org.springframework.boot.context.properties.bind包下
  • 已弃用基于JsonMixinModule扫描的构造函数。
  • ClientHttpRequestFactorySupplier应替换为ClientHttpRequestFactory
  • Cookiecomment属性不再受支持。
  • RestTemplateExchangeTagsProviderWebClientExchangeTagsPProviderWebFluxTagsProvideWebMvcTagsProvander和相关类已替换为ObservationConvention匹配的类。
  • HealthContributor @Configuration基础类上的无参数构造函数已被弃用。
  • DefaultTestExecutionListenersPostProcessorSpringBootDependencyInjectionTestExecution监听器已被弃用,取而代之的是Spring FrameworkApplicationContextFailureProcessor
  • 属性management.metrics.export<product>已过时,使用 management.<product>.metrics.export替换。
  • management.prometheus.metrics.export.pushgateway.shutdown-operation建议配置为post
  • @AutoConfigureMetrics已过时,使用@AutoConfigureObservabilit替换。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/377255.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RPC编程:Hessian RPC一个老的RPC框架(一)

RPC编程&#xff1a;Hessian RPC一个老的RPC框架一&#xff1a;Hessian RPC1&#xff1a;Hession RPC一个老的RPC框架2&#xff1a;老&#xff0c;为什么还要研究&#xff1f;3&#xff1a;Hession RPC概念二&#xff1a;Hessian RPC设计思想1&#xff1a;Hession依赖于服务器2…

卡方检验

一、卡方检验假设检验的一种&#xff0c;以实际观测值与期望值之间的偏离程度&#xff0c;解决是服从某个构成比率和是否具有相关性的问题。其偏离程度决定卡方值的大小&#xff0c;卡方值越小&#xff0c;偏差越小&#xff0c;实际值越趋于符合期望值。二、步骤在显著性为α0.…

如何防止DNS污染?

对于DNS污染&#xff0c;一般除了使用代理服务器和VPN之类的软件之外&#xff0c;并没有什么其它办法。但是利用我们对DNS污染的了解&#xff0c;还是可以做到不用代理服务器和VPN之类的软件就能解决DNS污染的问题&#xff0c;从而在不使用代理服务器或VPN的情况下访问原本访问…

大数据算法重点

1 大数据亚线性空间算法 场景&#xff1a;用二进制存储一个数字N&#xff0c;需要log(N)的空间 问题&#xff1a;如果N特别大而且这样的N又特别的多&#xff0c;该怎么办呢&#xff1f; 思路&#xff1a;减少一些准确性&#xff0c;从而节省更多的空间。 解决办法&#xff1a;使…

CentOS8基础篇8:使用systemctl管理NFS服务

一、服务简介 服务&#xff1a;是指执行指定系统功能的程序、例程或进程&#xff0c;以便支持其他程序&#xff0c;尤其是底层(接近硬件)程序。 例如&#xff1a;打印服务&#xff0c;ftp服务&#xff0c;http服务。 服务就是一个程序&#xff08;正在执行的程序&#xff09…

GG-21 100V 5A逆功率继电器

1 用途 GG-21逆功率继电器在出现逆功率时&#xff0c;从电网中断开交流发电机。 2 概述 逆功率继电器是基于感应式原理(具有旋转磁场)而工作。 继电器导磁体由两个磁路系统组成&#xff1a;上磁路系统和下磁路系统。电流线圈安装在上磁路系统中&#xff0c;它由接在发电机某相的…

机器学习|机器学习概述

目录 &#x1f4da;关于机器学习 &#x1f4da;监督学习和无监督学习 &#x1f430;监督学习 &#x1f430;无监督学习 &#x1f440;小结 &#x1f4da;关于机器学习 &#x1f308;在计算机中&#xff0c;“经验”通常以数据的形式存在。机器学习最主要的一项工作就是基…

MongoDB 详细教程,这一篇就够啦

文章目录1. 简介2. 特点3. 应用场景4. 安装&#xff08;docker&#xff09;5. 核心概念5.1 库5.2 集合5.3 文档6. 基本操作6.1 库6.1.1 增6.1.2 删6.1.3 改6.1.4 查6.2 集合6.2.1 增6.2.2 删6.2.3 改6.2.4 查6.3. 文档6.3.1 增6.3.2 删6.3.3 改6.3.4 查1. 语法2. 对比语法3. AN…

springboot使用Gateway搭建网关服务及Nacos实现动态路由

实际工作中我们会有很多个项目&#xff0c;这些项目共同使用同一个网关gateway来实现路由&#xff0c;各个项目之间调用以及前端调用都可以直接通过服务名称来调用&#xff0c;不用管ip&#xff0c;后续项目迁移到其它服务器也不受影响。 首先搭建springboot微服务&#xff0c…

智慧扫码点餐系统源码

智慧餐厅扫码点餐小程序系统源码 1. 开发语言&#xff1a;JAVA 2. 数据库&#xff1a;MySQL 3. 原生小程序 4. Saas 模式 5. 带调试部署视频 6、总后台管理端商家端门店端小程序用户端 智慧扫码点餐系统支持多店铺运营&#xff0c;单店铺运营以及连锁店铺运营。系统功能支…

服务案例|基于IT事件管理,提升业务连续性

数字化经济时代&#xff0c;IT架构复杂性越来越高&#xff0c;业务连续性成为很多行业或企业最核心的任务。业务连续性管理是一个不断提升的过程&#xff0c;围绕事件“发现-响应-定位处理-降低发生”的事件处理思路&#xff0c;结合平台化运维&#xff0c;助力业务快速提升。 …

leetcode-每日一题-1144(中等,贪心,数学)

这道题说实话理清楚的话很简单&#xff0c;就是很容易绕进去&#xff0c;刚开始绕进去了很难受&#xff0c;解了半天才出来。。。。给你一个整数数组 nums&#xff0c;每次 操作 会从中选择一个元素并 将该元素的值减少 1。如果符合下列情况之一&#xff0c;则数组 A 就是 锯齿…

Pytest自动化测试框架-权威教程01-安装及入门

安装及入门Python支持版本: Python 2.6,2.7,3.3,3.4,3.5,Jython,PyPy-2.3支持的平台: Unix/Posix and WindowsPyPI包名: pytest依赖项: py,colorama (Windows)PDF文档: 下载最新版本文档Pytest是一个使创建简单及可扩展性测试用例变得非常方便的框架。测试用例清晰、易读而无需…

【离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载】

离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载离线数仓-9-数据仓库开发DWS层设计要点-DWS层汇总表以及数据装载一、交易域用户商品粒度订单最近1日/N日汇总表1.交易域用户商品粒度订单最近1日汇总表2.交易域用户商品粒度订单最近N日汇总表二、交易域优惠券粒度…

华为OD机试模拟题 用 C++ 实现 - 通信误码(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 最多获得的短信条数(2023.Q1)) 文章目录 最近更新的博客使用说明通信误码题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,

(二)Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例

Markdown编辑器使用指南 &#xff08;一&#xff09;Markdown编辑器的使用示例 | 以CSDN自带MD编辑器为例&#xff08;二&#xff09;Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例 这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xf…

Hbase预分区参考

背景 我们都知道hbase的数据是分布在多台RegionServer角色的机器上的&#xff0c;每个RegionServer都有一到多个Region管理不同rowkey范围的数据,所以建表前通过合理的Region的分区及数量&#xff0c;可以避免热点读写问题和充分利用各RegionServer的资源&#xff0c;vmaster-h…

五、线程池

文章目录什么是线程池JDK自带的构建线程池的方式newFixedThreadPoolnewSingleThreadExecutornewCachedThreadPoolnewScheduleThreadPoolnewWorkStealingPoolThreadPoolExecutor应用&源码剖析为什么要自定义线程池ThreadPoolExecutor应用ThreadPoolExecutor源码剖析ThreadPo…

2023年3月北京/西安/广州/深圳DAMA-CDGA/CDGP数据治理认证报名

DAMA认证为数据管理专业人士提供职业目标晋升规划&#xff0c;彰显了职业发展里程碑及发展阶梯定义&#xff0c;帮助数据管理从业人士获得企业数字化转型战略下的必备职业能力&#xff0c;促进开展工作实践应用及实际问题解决&#xff0c;形成企业所需的新数字经济下的核心职业…

翻转链表专题

这个专题总共有四道题目 206 翻转链表 92 翻转链表某个区间&#xff08;翻转链表||&#xff09; 24 两个一组翻转链表 25 k个一组翻转链表 力扣206 翻转链表 其实就是头插法创建一个新链表 总共三个指针&#xff0c;dummy和head这两个指针是肯定是不用说的&#xff0c…