英文原文:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes
3.2 版本的亮点包括:
Spring Boot 3.2 使用的 Spring Framework 版本不再尝试通过解析字节码来推断参数名称。 如果遇到依赖项注入或属性绑定问题,则应仔细检查是否正在使用该选项进行编译。有关详细信息,请参阅“升级到 Spring Framework 6.x”wiki 的这一部分。-parameters
现在,只要您设置了属性,默认日志输出就会包含您的应用程序名称。 如果您更喜欢以前的格式,可以设置为 .spring.application.name``logging.include-application-name``false
现在,当一个或多个 、 和位于类路径上时,自动配置的会回退。 同样,在反应式应用程序中,当一个或多个 和 是类路径之一时,自动配置的现在会回退。InMemoryUserDetailsManager``spring-security-oauth2-client``spring-security-oauth2-resource-server``spring-security-saml2-service-provider``MapReactiveUserDetailsService``spring-security-oauth2-client``spring-security-oauth2-resource-server
如果您正在使用上述依赖项之一,但在应用程序中仍然需要 OR,请在应用程序中定义所需的 bean。InMemoryUserDetailsManager``MapReactiveUserDetailsService
默认值 已被删除。 现在,只有当 Bean 具有值时,才会自动配置。 要恢复旧行为,请将 。management.otlp.tracing.endpoint``OtlpHttpSpanExporter``management.otlp.tracing.endpoint``management.otlp.tracing.endpoint=http://localhost:4318/v1/traces
Spring Boot 现在默认使用 H2 的 2.2 版。 要继续使用早期版本的 H2 中的数据库,可能需要执行数据迁移。 在升级之前,请使用以下命令导出数据库。 使用新版本的 H2 创建一个空数据库,然后使用命令导入数据。SCRIPT``RUNSCRIPT
默认情况下,Oracle UCP 数据源不再设置为。 如果需要恢复旧行为,可以将 application 属性设置为 。validateConnectionOnBorrow``true``spring.datasource.oracleucp.validate-connection-on-borrow``true
Spring Boot 现在支持 Jetty 12。Jetty 12 支持 Servlet 6.0 API,使其与 Tomcat 和 Undertow 保持一致。 以前,如果将 Jetty 与 Spring Boot 3.x 一起使用,则必须将 Servlet API 降级到 5.0。 这不再是必需的。 升级时除去对 Servlet API 版本的任何覆盖。
Kotlin Gradle 插件 1.9.0 中存在一个错误,该错误会导致其他资源目录丢失。 这会中断本机映像编译,因为 AOT 处理生成的资源不包含在本机映像的类路径中。 要解决此问题,请先应用 Kotlin 的 Gradle 插件。
支持 Spring Boot 的“Uber Jar”加载的底层代码已被重写,因为我们不再需要支持 Java 8。 更新后的代码使用了一种更符合 JDK 预期的新 URL 格式。 以前的 URL 格式已替换为 。 更新后的代码还利用(这是 JDK 9 的一部分)进行资源管理。jar:file:/dir/myjar.jar:BOOT-INF/lib/nested.jar!/com/example/MyClass.class``jar:nested:/dir/myjar.jar/!BOOT-INF/lib/nested.jar!/com/example/MyClass.class``java.lang.ref.Cleaner
我们已尽一切努力确保新代码尽可能透明地替代以前的实现。 我们预计大多数用户甚至不会注意到这一变化。您可能会注意到更改的一个方面是,如果您直接引用其中一个启动器类,因为它们在新的默认启动器中具有新名称:
新增功能 | 经典 |
---|---|
org.springframework.boot.loader.launch.JarLauncher |
org.springframework.boot.loader.JarLauncher |
org.springframework.boot.loader.launch.PropertiesLauncher |
org.springframework.boot.loader.PropertiesLauncher |
org.springframework.boot.loader.launch.WarLauncher |
org.springframework.boot.loader.WarLauncher |
但是,如果您确实发现新实现存在问题,我们提供了一个回退选项,允许您使用旧代码。
对于 Gradle 用户,您可以将 设置为 . 例如:bootJar.loaderImplementation``org.springframework.boot.loader.tools.LoaderImplementation.CLASSIC
bootJar {
loaderImplementation = org.springframework.boot.loader.tools.LoaderImplementation.CLASSIC
}
对于 Maven 用户,您可以将配置上的标记设置为 。 例如:
org.springframework.boot
spring-boot-maven-plugin
repackage
CLASSIC
如果您在使用新实现时发现任何意外行为,请提出 GitHub 问题。
在此版本中删除了 Spring Boot 3.0 中弃用的类、方法和属性。 请确保在升级之前没有调用已弃用的方法。
没有。
提示 | 查看配置更改日志,了解配置更改的完整概述。 |
---|---|
Spring Boot 现在包括对 Spring for Apache Pulsar 项目的自动配置支持和入门 POM。 有关完整的详细信息,请参阅更新的参考文档。
现在,每当您使用千分尺跟踪时,Spring Boot 都会自动记录相关 ID。 有关详细信息,请参阅更新的文档。
Spring Boot 3.2 包括对 Spring Framework 6.1 中引入的新接口的支持。 此接口提供了一种功能样式,阻止 HTTP API,其设计类似于 。RestClient``WebClient
现有和新的应用程序可能需要考虑将其用作 的替代方法。RestClient``RestTemplate
有关详细信息,请参阅更新的参考文档。
当 Jetty 位于类路径上时,Spring Boot 的 HTTP 客户端自动检测现在将配置为使用 Spring Framework 6.1 中引入的新功能。HttpClient``RestTemplateBuilder``JettyClientHttpRequestFactory
已向 添加了对 的支持。 不像它没有被添加到自动检测中。要使用,您必须选择加入:JdkClientHttpRequestFactory``ClientHttpRequestFactories``JettyClientHttpRequestFactory``JdkClientHttpRequestFactory
@Bean
RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {
return configurer.configure(new RestTemplateBuilder())
.requestFactory(
(settings) -> ClientHttpRequestFactories.get(JdkClientHttpRequestFactory.class, settings));
}
JdbcClient
添加了 JdbcClient
的自动配置,基于 . 如果后者是自动配置的,则会考虑 的属性。NamedParameterJdbcTemplate``spring.jdbc.template.*
Spring Boot 3.2 提供了对虚拟线程的支持。 要使用虚拟线程,您需要在 Java 21 上运行并将属性设置为 。spring.threads.virtual.enabled``true
启用虚拟线程后,Tomcat 和 Jetty 将使用虚拟线程进行请求处理。 这意味着处理 Web 请求的应用程序代码(如控制器中的方法)将在虚拟线程上运行。
Spring WebFlux 对块执行的支持会自动配置为在 . 默认情况下和启用虚拟线程时都是。applicationTaskExecutor``AsyncTaskExecutor``applicationTaskExecutor``AsyncTaskExecutor
启用虚拟线程后,Bean 将被配置为使用虚拟线程。 任何使用应用程序任务执行器的地方,例如在调用方法时,Spring MVC 的异步请求处理以及 Spring WebFlux 的阻塞执行支持现在都将使用虚拟线程。 和以前一样,任何 Bean 都会应用于自动配置的执行器,并应用该属性。 其他属性将被忽略,因为它们特定于基于池的执行程序。applicationTaskExecutor``SimpleAsyncTaskExecutor``@EnableAsync``@Async``TaskDecorator``spring.task.execution.thread-name-prefix``spring.task.execution.*
A 现在在应用程序上下文中可用,可用于构建 . Bean 可用于自定义构建的 . 如果启用了虚拟线程,则构建器会自动配置为使用它们。SimpleAsyncTaskExecutorBuilder``SimpleAsyncTaskExecutor``SimpleAsyncTaskExecutorCustomizer``SimpleAsyncTaskExecutor
启用虚拟线程后,Bean 将被配置为使用虚拟线程。 应用属性和属性。 其他属性将被忽略,因为它们特定于基于池的计划程序。taskScheduler``SimpleAsyncTaskScheduler``spring.task.scheduling.thread-name-prefix``spring.task.scheduling.simple.``spring.task.scheduling.
A 现在在应用程序上下文中可用,可用于构建 . Bean 可用于自定义构建的 . 如果启用了虚拟线程,则构建器会自动配置为使用它们。SimpleAsyncTaskSchedulerBuilder``SimpleAsyncTaskScheduler``SimpleAsyncTaskSchedulerCustomizer``SimpleAsyncTaskScheduler
有一个名为 的新属性。当设置为 时,JVM 将保持活动状态,即使所有其他线程都是虚拟(或守护程序)线程也是如此。spring.main.keep-alive``true
启用虚拟线程后,以下特定于技术的集成适用:
ClusterCommandExecutor
VirtualThreadTaskExector``ConcurrentPulsarListenerContainerFactory``DefaultPulsarReaderContainerFactory
Spring Boot 3.2 提供了对 JVM 检查点还原(项目 CRaC)的初始支持。有关详细信息,请参阅相关文档。
现在,当信任材料发生变化时,可以自动重新加载 SSL 捆绑包。 捆绑包必须通过将其属性设置为 来选择使用此功能。 捆绑包的使用者还必须支持重新加载。reload-on-update``true
支持重新加载的使用者有:
有关重新加载 SSL 捆绑包的更多信息,请参阅参考文档。
您现在可以使用 Micrometer 的 @Timed
、 和 @Observed
注释。 如果类路径上有 AspectJ,则它们的方面现在会自动配置。@Counted``@NewSpan``@ContinueSpan
Micrometer Racing 的 Bean 会自动注册到 . 在 Spring Boot 3.2.0 之前,未分类的处理程序已在分类处理程序之前注册。 这已被翻转,分类的处理程序现在在未分类的处理程序之前注册。 有关详细信息,请参阅 #34399。ObservationHandler``ObservationConfig
B3 跟踪传播的默认格式已从单无父级更改为单级。
@Scheduled
现在,对方法进行了可观测性检测。
添加了 R2DBC 的可观测性。 若要启用它,请在项目中包含依赖项。io.r2dbc:r2dbc-proxy
有一个名为 的新配置属性,用于控制反应式管道中的上下文传播。 若要在反应式管道中自动传播观察、跟踪 ID 和范围 ID,请将该属性设置为 。spring.reactor.context-propagation``auto
以前缀开头的观测值现在可以通过属性禁用。 例如,要防止 Spring Security 报告观察结果,请设置 .management.observations.enable.spring.security=false
该属性可用于自动将低基数键值应用于所有观测值。 例如,设置会将具有该值的键添加到所有观测值。management.observations.key-values.*``management.observations.key-values.region=us-west``region``us-west
如果找到 OpenTelemetry bean,则会自动在 上注册该 Bean。MeterProvider``BatchSpanProcessor
改进了 OpenTelemetry 的自动配置。如果存在类型或上下文中的 bean,它将自动在 bean 上注册。 此外,OpenTelemetry 现在以 Bean 的形式公开,并且有一个新的配置属性用于配置资源属性。SdkLoggerProvider``SdkMeterProvider``OpenTelemetry``Resource``management.opentelemetry.resource-attributes
如果您使用的是 OpenTelemetry,并且想要对应用的 进行更多控制,您现在可以定义 类型的 bean 。 缺省情况下,将应用所有可用的 Bean。 这同样适用于 OpenTelemetry 的 ,使用 bean 覆盖默认值。 默认情况下,它应用所有可用的 bean。SpanProcessor``SpanProcessors``SpanProcessor``SpanExporter``SpanExporters``SpanExporter
Micrometer 1.12 包含一项功能,用于扩展需要 Prometheus 2.43 或更高版本的示例支持。如果您使用的是低于 2.43.0 的 Prometheus 版本,并且您使用的是千分尺跟踪,请升级到 Prometheus >= 2.43.0,否则指标将不再显示。
在 Spring Boot 3.2 之前,在运行集成测试时,整个 Micrometer Tracing、Brave 和 OpenTelemetry 基础架构已被禁用。 这已被重新设计:仅禁用最小数量的 bean,因此不会向后端发送任何 span(有关将被禁用的 bean 列表,请参阅 #35354)。 如果您有自定义的 Brave 或 OpenTelemetry bean,请确保对它们进行注释,以便在关闭可观测性的情况下运行集成测试时不会创建它们。SpanHandler``SpanExporter``@ConditionalOnEnabledTracing
如果要在启用可观测性的情况下运行集成测试,则可以在测试类上使用 @AutoConfigureObservability
注释。
使用 Maven 和 Gradle 插件构建映像时使用的默认 CNB 构建器已更改。 当 GraalVM 插件应用于构建时,新的默认构建器是 。 否则,新的默认构建器为 . 有关这些构建器的更多信息,请参阅 Paketo 文档。paketobuildpacks:builder-jammy-tiny``paketobuildpacks:builder-jammy-base
以前的默认构建器包括基于 Ubuntu 18.04 的运行映像,新的默认构建器包括基于 Ubuntu 22.04 的运行映像。 这意味着使用新默认值构建的任何映像都将基于 Ubuntu 22.04。
Maven 目标和 Gradle 任务现在使用 Docker CLI 配置文件来确定默认应使用的 Docker 守护程序的主机地址和其他连接详细信息。 有关更多信息,请参阅 Gradle 和 Maven 插件文档。spring-boot:build-image``bootBuildImage
现在可以将 CNB 构建器和构建包使用的构建和启动缓存配置为使用绑定挂载而不是命名卷。 BitBucket CI 用户已请求此功能,这些用户不允许从 CI 管道访问卷。 有关更多信息和示例,请参阅 Maven 和 Gradle 文档。
现在可以将 CNB 构建器和构建包使用的临时构建工作区配置为使用绑定挂载或自定义命名卷。 有关更多信息和示例,请参阅 Maven 和 Gradle 文档。
现在可以自定义应用于 CNB 生成器容器的安全选项,以支持现在允许使用默认 Linux 安全选项的 Docker 环境。 有关更多信息,请参阅 Maven 和 Gradle 文档。label=disable
Spring for GraphQL 现在自动配置为使用 . 这样就可以对返回 的控制器方法提供开箱即用的支持。applicationTaskExecutor``Callable
自动配置的 or 现在将使用任何 bean 进行令牌验证。 它们包含在配置为解码器验证器的验证器中。JwtDecoder``ReactiveJwtDecoder``OAuth2TokenValidator
添加了对 ActiveMQ 的支持,并集成了 Testcontainers 和 Docker Compose。 集成使用图像。ServiceConnection``symptoma/activemq
Spring Boot 的 Docker Compose 集成现在支持 Neo4j。 您必须在撰写 YAML 中配置环境变量以禁用身份验证(值为 )或为用户设置密码(值为 )。NEO4J_AUTH``none``neo4j``neo4j/your-password
可以使用命名空间的属性自定义自动配置所使用的。WebSocketServerSpec``spring.rsocket.server.spec
AuthTokenManager
如果定义了一个 bean,它将用于 Neo4j 的身份验证。 这样的 Bean 优先于属性。 如果定义了 custom,例如,对于与 Testcontainers 或 Docker Compose 托管数据库的服务连接,则忽略 Bean。AuthTokenManager``spring.neo4j.authentication.*``AuthTokenManager``Neo4jConnectionDetails
现在可以将 RabbitMQ 连接配置为使用具有该属性的 SSL 捆绑包中的 SSL 信任材料。 这提供了使用现有属性作为 Java 密钥库文件提供信任材料的替代方法。spring.rabbitmq.ssl.bundle``spring.rabbitmq.ssl
默认情况下,最新版本的 RabbitMQ Java 客户端将入站消息正文的最大大小限制为 64MB。 为了自定义此限制,引入了配置属性。spring.rabbitmq.max-inbound-message-body-size
添加了对 RabbitMQ Stream 的虚拟主机支持。如果未显式设置 RabbitMQ Stream,则 RabbitMQ Stream 的虚拟主机会自动使用 RabbitMQ 配置的虚拟主机。 要对 RabbitMQ Stream 使用特定的虚拟主机,请设置 。spring.rabbitmq.stream.virtual-host
现在可以将 Kafka 连接配置为使用具有该属性的 SSL 捆绑包中的 SSL 信任材料。 这提供了使用现有属性作为 Java 密钥库文件提供信任材料的替代方法。spring.kafka.ssl.bundle``spring.kafka.ssl
引入了新的属性,用于配置由自动配置创建的会话:JmsTemplate
spring.jms.template.session.acknowledge-mode
spring.jms.template.session.transacted
同样,也为自动配置的 .spring.jms.listener.session.transacted``JmsMessageListenerContainer
为了与这些新属性保持一致,请注意,现有属性已被弃用,并已作为替代引入。spring.jms.listener.acknowledge-mode``spring.jms.listener.session.acknowledge-mode
删除了 Oracle UCP 数据源上连接验证的默认值。 在默认情况下启用 3.2.0-RC1 连接验证之前,情况不再如此。 如果需要连接验证,请将配置属性设置为 。spring.datasource.oracleucp.validate-connection-on-borrow``true
除此之外,Spring Boot 的 Gradle 插件现在还创建了一个配置。 与此新配置不同的是,此新配置中的依赖项包含在测试编译和运行时类路径中。 它主要适用于在开发时使用 Testcontainers 的应用程序。developmentOnly``testAndDevelopmentOnly``developmentOnly
除了上面列出的更改外,还进行了许多小的调整和改进,包括:
EnumFeature``JsonNodeFeature``spring.jackson.datatype.enum.``spring.jackson.datatype.jsonnode.
Provider
TransactionManager``PlatformTransactionManager
TransactionExecutionListener
spring.servlet.multipart.strict-servlet-compliance``multipart/form-data
Accept
RestClientBuilderConfigurer``RestClient.Builder
restTemplateBuilderConfigurer``restTemplateBuilderConfigurer
PemSslStoreBundle
spring.application.name
现在用于 OpenTelemetry,如果已显式设置 no。service.name``service.name
TimeUnit
otel/opentelemetry-collector-contrib
flyway.postgresql.transactional-lock
changeConsumerThreadName
Function``threadNameSupplier
@ConditionalOnThreading
forceStop
WebClient
messages.properties``messages_*.properties
org.awaitility:awaitility``spring-boot-starter-test
JdbcClient``@JdbcTest``@DataJpaTest
MockMvc
spring.testcontainers.beans.startup``parallel
spring.kafka.template.observation-enabled
Spring Boot 3.2.0 移动到以下 Spring 项目的新版本:
第三方依赖项也已更新,其中更值得注意的如下:
directories``spring-boot:run``spring-boot:start``spring-boot:test-run``additionalClasspathElements
management.metrics.tags.``management.observations.key-values.
LoggingSystemProperties``LogbackLoggingSystemProperties
ClientHttpRequestFactorySettings``RestTemplateBuilder
ApplicationContextInitializer``context.initializer.classes
ApplicationListener``context.listener.classes
flyway.oracle*``flyway.oracle.*``spring.flyway.sql-server-kerberos-login-file``spring.flyway.sqlserver.kerberos-login-file
management.otlp.metrics.export.resource-attributes``management.opentelemetry.resource-attributes
TaskExecutorBuilder
已被弃用,取而代之的是 。ThreadPoolTaskExecutorBuilder
TaskSchedulerBuilder
已被弃用,取而代之的是 。ThreadPoolTaskSchedulerBuilder
spring.jms.listener.concurrency``spring.jms.listener.min-concurrency
spring.jms.listener.acknowledge-mode``spring.jms.listener.session.acknowledge-mode
PlatformTransactionManagerCustomizer
更换.TransactionManagerCustomizer
TransactionManagerCustomizers(Collection extends PlatformTransactionManagerCustomizer>>)
更换.TransactionManagerCustomizers#of(Collection extends TransactionManagerCustomizer>>)
DelegatingApplicationContextInitializer
并且不再建议基于属性的初始化。DelegatingApplicationListener
PemSslStoreBundle``certificate``PemSslStoreDetails
TaskExecutorCustomizer
赞成ThreadPoolTaskExecutorCustomizer
TaskSchedulerBuilder
赞成ThreadPoolTaskSchedulerBuilder
TaskSchedulerCustomizer
赞成ThreadPoolTaskSchedulerCustomizer
NettyWebServer
© 2023 年 GitHub, Inc.
页脚导航条款隐私安全地位文档联系 GitHub定价应用程序接口训练博客大约