有道无术,术尚可求,有术无道,止于术。
本系列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正式版,它是由罗德·约翰逊创建的一个轻量级开源框架。
在此之前,开发一个企业应用项目是是比较复杂的,比如使用EJB
。Spring
框架通过控制反转和面向切面编程的思想进行更轻松的企业应用开发,取代了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)
内嵌Tomcat
、Jetty
、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 8
或Java 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 Tracing
、Micrometer 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 Netty
、Jetty
的反应式客户端和Apache HTTP
客户端的情况下,JdkClientHttpConnector
现在将自动配置。WebClient
与JDK
的HttpClient
可以一起使用。
@SpringBootTest 支持 main 方法
@SpringBootTest
注解新增userMainMethod
属性,配置为useMainMethod
可以调用Spring Boot
应用入口的main
方法。
调整和改进
除了上面列出的更改外,还进行了一些小的调整和改进,包括:
- 在应用程序启动期间不再记录主机名,有助于缩短启动时间的网络查找。
- 在
JDK
中弃用Java
的SecurityManager
之后,对它的支持已被删除。 - 对
Spring Framework
的CommonsMultipartResolver
的支持在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
配置。 Log4j2
的Log4jBridgeHandler
现在用于将基于JUL
的日志路由到Log4j2
,而不是通过SLF4J
。- 实现
MeterBinder
接口的Bean
现在仅在所有单例Bean
初始化后绑定到容器中。 Brave
和OpenTelemetry
的SpanCustomizer
现在已自动配置。Micrometer
中的JvmCompilationMetrics
现在已自动配置。DiskSpaceHealthIndicator
现在在其日志消息中包含其路径及其运行状况详细信息。DataSourceBuilder
现在可以从包装的DataSource
派生。- 可以使用
spring.data.mongodb.additional-hosts
为MongoDB
配置多个主机和其他主机属性。 Elasticsearch
的socketKeepAlive
属性可以使用spring.elasticsearch.socket-keep-alive
属性进行配置。- 当使用
spring-rabbit-stream
时,RabbitStreamTemplate
和Environment
将自动配置,无论spring.rabbitmq.listener.type
是否配置为stream
。 - 可以使用
spring.kafka.admin.modify-topic-configs
属性修改现有的Kafka Topic
。 WebDriverScope
和WebDriverTestExecutionListener
已公开,以便于在自定义测试设置中使用WebDriver
。
过时
@ConstructorBinding
已从org.springframework.boot.context.properties
移动到org.springframework.boot.context.properties.bind
包下- 已弃用基于
JsonMixinModule
扫描的构造函数。 ClientHttpRequestFactorySupplier
应替换为ClientHttpRequestFactory
。Cookie
的comment
属性不再受支持。RestTemplateExchangeTagsProvider
、WebClientExchangeTagsPProvider
、WebFluxTagsProvide
、WebMvcTagsProvande
r和相关类已替换为ObservationConvention
匹配的类。- 在
HealthContributor @Configuration
基础类上的无参数构造函数已被弃用。 DefaultTestExecutionListenersPostProcessor
和SpringBootDependencyInjectionTestExecution
监听器已被弃用,取而代之的是Spring Framework
的ApplicationContextFailureProcessor
。- 属性
management.metrics.export<product>
已过时,使用management.<product>.metrics.export
替换。 management.prometheus.metrics.export.pushgateway.shutdown-operation
建议配置为post
。@AutoConfigureMetrics
已过时,使用@AutoConfigureObservabilit
替换。