ToB企服应用市场:ToB评测及商务社交产业平台

标题: SpringBoot3.2更新声明! [打印本页]

作者: 河曲智叟    时间: 2024-5-28 21:18
标题: SpringBoot3.2更新声明!
1 从 Spring Boot 3.1 升级

1.1 参数名称发现

Spring Boot 3.2 使用的 Spring Framework 版本不再尝试通过剖析字节码来推断参数名称。假如您在依赖注入或属性绑定时遇到问题,请务必检查您是否在编译时使用了 -parameters 选项。有关更多详细信息,请参阅 "升级到 Spring Framework 6.x" wiki 的此部分
1.2 记录的应用程序名称

每当设置 spring.application.name 属性时,默认的日记输出就会包含您的应用程序名称。如更喜欢之前格式,可将 logging.include-application-name 置 false。
1.3 自动配置的用户详细信息服务

若在类路径存在 spring-security-oauth2-client、spring-security-oauth2-resource-server 和 spring-security-saml2-service-provider 中的一个或多个,而且从 3.2.2 开始,既没有配置 spring.security.user.name 也没有配置 spring.security.user.password,则自动配置的 InMemoryUserDetailsManager 如今将退出。同样,在反应式应用程序中,假如在类路径上存在 spring-security-oauth2-client 和 spring-security-oauth2-resource-server 中的一个或多个,而且从 3.2.2 开始,既没有配置 spring.security.user.name 也没有配置 spring.security.user.password,则自动配置的 MapReactiveUserDetailsService 如今也将退出。
假如您正在使用上述依赖项之一,但仍然需要在应用程序中使用 InMemoryUserDetailsManager 或 MapReactiveUserDetailsService,请在应用程序中定义所需的 bean,大概从 Spring Boot 3.2.2 开始,配置 spring.security.user.name 和 spring.security.user.password 中的一个或两个。
1.4 OTLP 跟踪端点

management.otlp.tracing.endpoint 的默认值已被删除。只有当 management.otlp.tracing.endpoint 有值时,才会自动配置 OtlpHttpSpanExporter bean。要恢复旧行为,请设置 management.otlp.tracing.endpoint=http://localhost:4318/v1/traces。
1.5 嵌套 Jar 支持

支持 Spring Boot "Uber Jar" 加载的底层代码已被重写,因为我们不再需要支持 Java 8。更新后的代码使用了一种新的 URL 格式,该格式更符合 JDK 的期望。之前的 URL 格式 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(这是 JDK 9 的一部分)来管理资源。
我们已尽统统积极确保新代码在尽可能大的程度上是对之前实现的透明替换。我们预计大多数用户以致不会注意到这种变化。您可能会注意到变化的一个领域是,假如您直接引用了启动器类之一,因为它们在新的默认启动器中有新的名称:
新经典org.springframework.boot.loader.launch.JarLauncherorg.springframework.boot.loader.JarLauncherorg.springframework.boot.loader.launch.PropertiesLauncherorg.springframework.boot.loader.PropertiesLauncherorg.springframework.boot.loader.launch.WarLauncherorg.springframework.boot.loader.WarLauncher但是,假如您发现新实现存在任何意生手为,我们也提供了一个回退选项,答应您使用旧代码。
对于 Maven 用户,您可以将 spring-boot-plugin 配置中的  标签设置为 CLASSIC。例如:
  1. <build>
  2.   <plugins>
  3.     <plugin>
  4.       <groupId>org.springframework.boot</groupId>
  5.       <artifactId>spring-boot-maven-plugin</artifactId>
  6.       <executions>
  7.         <execution>
  8.           <goals>
  9.             <goal>repackage</goal>
  10.           </goals>
  11.           <configuration>
  12.             <loaderImplementation>CLASSIC</loaderImplementation>
  13.           </configuration>
  14.         </execution>
  15.       </executions>
  16.     </plugin>
  17.   </plugins>
  18. </build>
复制代码
1.6 Spring Boot 3.0 中的弃用情况

在本次发布中,已删除 Spring Boot 3.0 中已弃用的类、方法和属性。升级之前,请确保您没有调用已弃用的方法。
1.7 日记关联 ID

只要使用 Micrometer 跟踪,Spring Boot 就会自动记录关联 ID。参阅更新后的文档
假如您自己配置了跟踪 id 和 span id 的日记记录,例如以下内容:
  1. logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]
复制代码
您如今可以将其删除。应用程序名称、跟踪 id 和 span id 如今默认包含在内。
1.8 RestClient 支持

Spring Boot 3.2 包括对新的 RestClient 接口的支持,该接口已在 Spring Framework 6.1 中引入。此接口提供了一种雷同于 WebClient 设计的函数式阻塞 HTTP API。
现有和新的应用程序可能需要考虑使用 RestClient 作为 RestTemplate 的替代方案。
详参更新后的参考文档
1.9 RestTemplate HTTP 客户端

当类路径上存在 Jetty 的 HttpClient 时,Spring Boot 的 HTTP 客户端自动检测将配置 RestTemplateBuilder 使用 Spring Framework 6.1 中新引入的 JettyClientHttpRequestFactory。
对 JdkClientHttpRequestFactory 的支持已添加到 ClientHttpRequestFactories。与 JettyClientHttpRequestFactory 不同,它尚未添加到自动检测中。要使用 JdkClientHttpRequestFactory,您必须主动启用:
  1. @Bean
  2. RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {
  3.     return configurer.configure(new RestTemplateBuilder())
  4.         .requestFactory(
  5.                 (settings) -> ClientHttpRequestFactories.get(JdkClientHttpRequestFactory.class, settings));
  6. }
复制代码
1.10 对 JdbcClient 的支持

基于 NamedParameterJdbcTemplate 的存在,已添加了对 [JdbcClient](https://docs.spring .io/spring-boot/docs/3.2.0/reference/html//data.html#data.sql.jdbc-client) 的自动配置。假如后者是自动配置的,则会考虑 spring.jdbc.template.* 属性。
1.11 对虚拟线程的支持

Spring Boot 3.2 附带对虚拟线程的支持。要使用虚拟线程,您需要运行在 Java 21 上,并将属性 spring.threads.virtual.enabled 设置为 true。
① Servlet Web 服务器

启用虚拟线程时,Tomcat 和 Jetty 将使用虚拟线程进行请求处理。这意味着您处理 Web 请求的应用程序代码(如控制器中的方法)将在虚拟线程上运行。
② 使用 Spring WebFlux 的阻塞执行

当虚拟线程启用时,Spring WebFlux 对阻塞执行的支持会自动配置为使用 applicationTaskExecutor bean (假如它是一个 AsyncTaskExecutor)。无论是默认情况下照旧启用虚拟线程时,applicationTaskExecutor 都是一个 AsyncTaskExecutor。
③ 任务执行

当启用虚拟线程时,applicationTaskExecutor bean 将是一个配置为使用虚拟线程的 SimpleAsyncTaskExecutor。任何使用应用程序任务执行器的地方,例如调用 @Async 方法时的 @EnableAsync、Spring MVC 的异步请求处理以及 Spring WebFlux 的阻塞执行支持,如今都将利用虚拟线程。与以前一样,任何 TaskDecorator bean 都会应用于自动配置的执行器,并且 spring.task.execution.thread-name-prefix 属性也会应用。其他 spring.task.execution.* 属性将被忽略,因为它们特定于基于池的执行器。
如今应用程序上下文中提供了 SimpleAsyncTaskExecutorBuilder,可用于构建 SimpleAsyncTaskExecutor。假如启用了虚拟线程,SimpleAsyncTaskExecutorCustomizer bean 可用于自定义构建的 SimpleAsyncTaskExecutor。构建器将自动配置为使用它们。
④ 任务调理

当启用虚拟线程时,taskScheduler bean 将是一个配置为使用虚拟线程的 SimpleAsyncTaskScheduler。将应用 spring.task.scheduling.thread-name-prefix 属性和 spring.task.scheduling.simple.* 属性。其他 spring.task.scheduling.* 属性将被忽略,因为它们特定于基于池的调理程序。
如今应用程序上下文中提供了 SimpleAsyncTaskSchedulerBuilder,可用于构建 SimpleAsyncTaskScheduler。假如启用了虚拟线程,SimpleAsyncTaskSchedulerCustomizer bean 可用于自定义构建的 SimpleAsyncTaskScheduler。构建器将自动配置为使用它们。
⑥ 使 JVM 保持活动状态

如今有一个新属性叫做 spring.main.keep-alive。当设置为 true 时,纵然所有其他线程都是虚拟线程(或保卫线程),JVM 也会保持活动状态。
⑦ 特定技能集成

启用虚拟线程时,以下特定技能集成适用:
1.12 对 JVM 检查点/恢复的初始支持

Spring Boot 3.2 附带对 JVM 检查点/恢复(Project CRaC)的初始支持。有关更多详细信息,请参阅相干文档
1.13 SSL 捆绑包重新加载

如今可以在信托质料发生变化时自动重新加载 SSL 捆绑包。捆绑包必须选择启用此功能,将其 reload-on-update 属性设置为 true。捆绑包的使用者也必须支持重新加载。
支持重新加载的使用者包括:
有关 SSL 捆绑包重新加载的更多信息,可以在参考文档中找到。
1.14 可观测性改进

您如今可以使用 Micrometer 的 @Timed、@Counted、@NewSpan、@ContinueSpan 和 @Observed 注解。假如类路径上有 AspectJ,它们的 aspects 如今将自动配置。
Micrometer Tracing 的 ObservationHandler bean 如今自动注册到 ObservationConfig。在 Spring Boot 3.2.0 之前,未分类的处理程序会在分类处理程序之前注册。如今这一点已被颠倒,分类的处理程序如今会在未分类的处理程序之前注册。有关详细信息,请参阅 #34399
B3 跟踪传播的默认格式已从 single-no-parent 更改为 single
@Scheduled 方法如今已针对可观测性进行了检测。
已添加了对 R2DBC 的可观测性支持。要启用它,请在项目中包含 io.r2dbc:r2dbc-proxy 依赖项。
① 属性

如今有一个名为 spring.reactor.context-propagation 的新配置属性,用于控制反应式管道中的上下文传播。要在您的反应式管道中自动传播观察效果、跟踪 id 和 span id,请将该属性设置为 auto。
如今可以通过属性禁用以特定前缀开头的观察效果。例如,要防止 Spring Security 报告观察效果,请设置 management.observations.enable.spring.security=false。
属性 management.observations.key-values.* 可用于自动将低基数键值应用于所有观察效果。例如,设置 management.observations.key-values.region=us-west 将向所有观察效果添加键 region 和值 us-west。
② OpenTelemetry

假如在上下文中找到 OpenTelemetry MeterProvider bean,它将自动注册到 BatchSpanProcessor。
OpenTelemetry 的自动配置已经改进。假如上下文中有 SdkLoggerProvider 或 SdkMeterProvider 类型的 bean,它将自动注册到 OpenTelemetry bean 上。别的,OpenTelemetry 的 Resource 如今作为 bean 暴露,并且有一个新的配置属性 management.opentelemetry.resource-attributes,用于配置资源属性。
假如您正在使用 OpenTelemetry 并希望对应用的 SpanProcessor 有更多控制,您如今可以定义一个 SpanProcessors 类型的 bean。默认情况下,所有可用的 SpanProcessor bean 都会应用。对于 OpenTelemetry 的 SpanExporter,使用 SpanExporters bean 来覆盖默认值。默认情况下,它会应用所有可用的 SpanExporter bean。
③ Micrometer 1.12 中更广泛的示例支持

Micrometer 1.12 包括一个扩大示例支持的功能,这需要 Prometheus 2.43 或更高版本。假如您使用的是 2.43.0 之前的 Prometheus 版本,并且您正在使用 Micrometer Tracing,请升级到 Prometheus >= 2.43.0,否则指标将不再显示。
④ 测试中的可观测性

在 Spring Boot 3.2 之前,当运行集成测试时,整个 Micrometer Tracing、Brave 和 OpenTelemetry 基础设施都会被禁用。这一点已经过修改:只有最少数量的 bean 被禁用,因此不会向后端发送任何 span(有关将被禁用的 bean 列表,请参阅 #35354)。假如您有自定义的 Brave SpanHandler 或 OpenTelemetry SpanExporter bean,请务必使用 @ConditionalOnEnabledTracing 注解对它们进行注解,如许在运行禁用了可观测性的集成测试时,它们就不会被创建。
假如您希望在启用可观测性的情况下运行集成测试,您可以在测试类上使用 @AutoConfigureObservability 注解
1.15 Docker 镜像构建

默认的 CNB 构建器已升级

当使用 Maven 和 Gradle 插件构建镜像时,使用的默认 CNB 构建器已经更改。当应用### 直译续
GraalVM 插件到构建时,新的默认构建器是 paketobuildpacks:builder-jammy-tiny。否则,新的默认构建器是 paketobuildpacks:builder-jammy-base。有关这些构建器的更多信息,请参阅 Paketo 文档
以前的默认构建器包含了基于 Ubuntu 18.04 的运行映像,而新的默认值包含了基于 Ubuntu 22.04 的运行映像。这意味着使用新的默认值构建的任何映像都将基于 Ubuntu 22.04。
Docker 主机配置

spring-boot:build-image Maven 目标和 bootBuildImage Gradle 任务如今使用 Docker CLI 配置文件来确定要使用的 Docker 保卫进程的主机地址和其他连接详细信息。有关更多信息,请参阅 Gradle 和 [Maven](https://docs.spring.io/spring-boot /docs/3.2.0/maven-plugin/reference/htmlsingle/#build-image.docker-daemon) 插件文档。
用于缓存的绑定挂载

如今可以配置 CNB 构建器和 buildpack 使用的构建和启动缓存,以使用绑定挂载而不是命名卷。BitBucket CI 的用户要求提供此功能,因为它们不答应从 CI 管道访问卷。有关更多信息和示例,请参阅 [Maven](https://docs.spring.io/spring-boot/docs/3.2.0/maven-plugin/reference/htmlsingle/#build -image.examples.caches) 和 Gradle 文档。
构建工作区配置

如今可以配置 CNB 构建器和 buildpack 使用的暂时构建工作区,以使用绑定挂载或自定义命名卷。有关更多信息和示例,请参阅 MavenGradle 文档。
安全选项配置

如今可以自定义应用于 CNB 构建器容器的安全选项,以支持不答应使用默认 Linux 安全选项 label=disable 的 Docker 环境。有关更多信息,请参阅 MavenGradle 文档。
对 Spring for GraphQL 的可调用支持

如今Spring for GraphQL 被自动配置为使用 applicationTaskExecutor。这为控制器方法返回 Callable 提供了开箱即用的支持。
其他 OAuth2 令牌验证器

自动配置的 JwtDecoder 或 ReactiveJwtDecoder 如今将使用任何 OAuth2TokenValidator bean 进行令牌验证。它们包含在配置为解码器的验证器的 DelegatingOAuth2TokenValidator 中。
对 ActiveMQ 的服务连接支持

已添加对 ActiveMQ 的 ServiceConnection 支持,并针对 Testcontainers 和 Docker Compose 提供了集成。该集成使用 symptoma/activemq 镜像。
对 Neo4j 的 Docker Compose 支持

Spring Boot 的 Docker Compose 集成如今支持 Neo4j。您必须在 compose YAML 中配置 NEO4J_AUTH 环境变量,以禁用身份验证(值为 none)或为 neo4j 用户设置密码(值为 neo4j/your-password)。
WebSocketServerSpec 配置

自动配置使用的 WebSocketServerSpec 如今可以使用 spring.rsocket.server.spec 命名空间下的属性进行自定义。
Neo4j AuthTokenManager

假如定义了 AuthTokenManager bean,它将用于 Neo4j 的身份验证。这种 bean 优先于 spring.neo4j.authentication.* 属性。假如定义了自定义 Neo4jConnectionDetails(例如用于 Testcontainers 或 Docker Compose 管理的数据库的服务连接),则会忽略 AuthTokenManager bean。
RabbitMQ

SSL 捆绑包支持

如今可以使用 spring.rabbitmq.ssl.bundle 属性将 RabbitMQ 连接配置为使用来自 SSL 捆绑包的信托质料。这提供了一种替代方法,而不是使用现有的 spring.rabbitmq.ssl 属性提供 Java 密钥库文件作为信托质料。
限制消息正文大小

最新版本的 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 捆绑包支持

如今可以使用 spring.kafka.ssl.bundle 属性将 Kafka 连接配置为使用来自 SSL 捆绑包的信托质料。这提供了一种替代方法,而不是使用现有的 spring.kafka.ssl 属性提供 Java 密钥库文件作为信托质料。
JMS 会话

已引入新属性用于配置自动配置的 JmsTemplate 创建的会话:
雷同地,还引入了 spring.jms.listener.session.transacted 属性,用于自动配置的 JmsMessageListenerContainer。
为与这些新属性保持一致,请注意,现有的 spring.jms.listener.acknowledge-mode 属性已被弃用,并引入了### 直译续
spring.jms.listener.session.acknowledge-mode 作为替代。
Oracle UCP 数据源上的连接验证

已删除了 Oracle UCP 数据源上连接验证的默认值。在 3.2.0-RC1 之前,默认情况下启用了连接验证,如今不再是这种情况。假如您需要连接验证,请将配置属性 spring.datasource.oracleucp.validate-connection-on-borrow 设置为 true。
testAndDevelopmentOnly Gradle 配置

除了 developmentOnly,Spring Boot 的 Gradle 插件如今还创建了一个 testAndDevelopmentOnly 配置。与 developmentOnly 不同,此新配置中的依赖项将包含在测试编译和运行时类路径中。它主要供那些在[开发时使用 Testcontainers](https://docs.spring.io/spring-boot/docs/3.2.0/reference/html/features.html#features.testing.testcontainers .at-development-time) 的应用程序使用。
其他

除了上述更改之外,还有很多小的调整和改进,包括:
3.2.0废除的

OkHttp 3 的支持已被弃用,有利于 OkHttp 4
本文由博客一文多发平台 OpenWrite 发布!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4