Spring Boot 3.4.0 发行:革新与突破的里程碑

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

Spring Boot 3.4.0 发行:革新与突破的里程碑

Spring Boot 3.4.0 于2024-11-21正式发布:
在这里插入图片描述

引言

本次Spring Boot 3.4.0 的发布带来了一系列令人期待和关注的重要特性,显著提升了开发体验与应用性能,本次带来的更新核心的几点如下:

一、日志与配置优化

  • 结构化日志记录:支持多种格式如 ECS、GELF 和 Logstash,通过logging.structured.format.filelogging.structured.format.console属性便捷开启,使日志规整有序,便于分析处理,极大助力于分布式系统的监控与问题排查。
  • 配置元数据升级:注释处理器可检测Enum默认值,减少手动元数据配置,让配置过程更加智能高效,降低出错概率。

二、功能组件增强

  • Spring Pulsar 拓展:可配置默认租户和命名空间,新增PulsarContainerFactoryCustomizer等接口自定义容器工厂,还能对客户端并发等进行精细调控,如设置spring.pulsar.client.threads.iospring.pulsar.client.threads.listener,使 Pulsar 在应用中集成更灵活强大。
  • Couchbase 身份验证多元化:除基本用户名密码方式,新增客户端证书认证,满足更高安全需求场景,为数据安全保驾护航。
  • FreeMarker 变量自定义:能通过FreeMarkerVariablesCustomizer bean 灵活定制自动配置的 FreeMarker 的Configuration对象使用的变量,增强模板引擎的个性化适配能力。

三、测试与可观察性提升

  • 测试框架改进
    • AssertJ 对 MockMvc 支持,自动配置MockMvcTester,以流畅 API 定义请求和断言,注入MockMvc处即可使用,优化测试代码编写体验。
    • 测试容器方面,支持org.testcontainers.kafka.KafkaContainer、Redis Stack 相关容器以及org.testcontainers.grafana.LgtmStackContainer等,拓宽测试覆盖范围。
  • 可观察性飞跃
    • 应用程序分组功能,spring.application.group属性实现应用归类,在日志和 OpenTelemetry Resource中体现,方便管理与监控资源。
    • OTLP 功能拓展,支持 gRPC 传输发送跨度,management.otlp.logs下属性助力日志导出配置,ProcessInfoContributor展示内存信息并新增跟踪导出控制属性,全方位提升可观察性数据管理的精细度。

四、Actuator 功能升级

  • 可插拔暴露器:可扩展 Spring Boot 以灵活方式暴露 Actuator 端点,借助EndpointExposureOutcomeContributor接口实现,便于与不同平台集成,如类似 Cloud Foundry 支持的拓展。
  • SSL 信息与健康检查/actuator/info下新增 SSL 信息端点,展示有效期等内容并可预警证书过期,同时新增健康检查监控 SSL 证书状态,保障通信安全。
  • 任务端点信息丰富/actuator/scheduledtasks端点公开更多元数据,如下次计划执行时间和上次执行详情,便于深入了解任务执行状况。

从Spring Boot 3.3升级

RestClient和RestTemplate

已添加对自动配置RestClientRestTemplate以使用Reactor Netty的HttpClient或JDK的HttpClient的支持。按照优先顺序,现在支持的客户端如下:

  1. Apache HTTP Components(HttpComponentsClientHttpRequestFactory
  2. Jetty Client(JettyClientHttpRequestFactory
  3. Reactor Netty HttpClientReactorClientHttpRequestFactory
  4. JDK HttpClientJdkClientHttpRequestFactory
  5. 简单JDK HttpURLConnectionSimpleClientHttpRequestFactory

值得注意的是,如果类路径上没有HTTP客户端库,这可能会导致使用JdkClientHttpRequestFactory,而以前会使用SimpleClientHttpRequestFactory。可以通过设置spring.http.client.factory选择特定的客户端。支持的值为http-componentsjettyreactorjdksimple

所有五个客户端默认都会跟随重定向。要禁用此行为,请将spring.http.client.redirects设置为dont-follow

Apache HTTP Components和Envoy

Apache HTTP Components在与HTTP/1.1 TLS升级相关的HttpClient中更改了默认值。大多数代理服务器可以毫无问题地处理升级,但是,您可能会在使用Envoy或Istio时遇到问题。

如果需要恢复以前的行为,可以使用新的ClientHttpRequestFactoryBuilder。定义一个HttpComponentsClientHttpRequestFactoryBuilder并应用以下自定义:

@Bean
public HttpComponentsClientHttpRequestFactoryBuilder httpComponentsClientHttpRequestFactoryBuilder() {return ClientHttpRequestFactoryBuilder.httpComponents().withDefaultRequestConfigManagerCustomizer((builder) -> builder.setProtocolUpgradeEnabled(false));
}

配置属性的Bean验证

以前,当使用Hibernate Validator等Bean验证实现验证带有@Validated注释的@ConfigurationProperties类时,无论是否使用@Valid,都会在绑定嵌套属性时执行验证。在Spring Boot 3.4中,验证现在遵循Bean验证规范的行为。验证从带有@ConfigurationProperties注释的类开始,并且仅在相应字段带有@Valid注释时才级联到嵌套属性。

升级时,请检查带有Bean验证约束的@ConfigurationProperties类。在需要验证级联到嵌套属性的地方添加@Valid

基于Bean的条件

@Bean方法上使用@ConditionalOnBean@ConditionalOnMissingBean并且设置了annotation属性时,其行为已更改。和以前一样,这两个条件都将使用@Bean方法的返回类型作为要匹配的类型的默认值。以前,如果设置了nametypevalue,则不使用此默认值。从Spring Boot 3.4开始,如果设置了annotation,也不会使用此默认值。要恢复以前的行为,请同时指定value(即@Bean方法的返回类型)和annotation

优雅停机

嵌入式Web服务器(Jetty、Reactor Netty、Tomcat或Undertow)的优雅停机现在默认启用。如果需要恢复以前的行为,请将server.shutdown设置为immediate

用于构建OCI镜像的Paketo tiny Builder

使用Maven spring-boot:build-image目标或Gradle bootBuildImage任务为JVM应用程序构建OCI镜像时,默认使用的Cloud Native Buildpacks构建器已从paketobuildpacks/builder-jammy-base更改为paketobuildpacks/builder-jammy-java-tiny。这应该会生成更小的镜像。tiny构建器不包括外壳,因此对于需要启动脚本来运行应用程序的应用程序可能不起作用。有关自定义构建器的信息,请参阅Maven或Gradle文档。

带有Testcontainers的动态属性

通过注入DynamicPropertyRegistry定义动态属性的支持已被弃用,并且现在默认情况下尝试这样做会失败。不要注入DynamicPropertyRegistry,而是实现一个单独的返回DynamicPropertyRegistrar@Bean方法。这个单独的bean方法应该注入将从中获取属性值的容器。这解决了一些容器生命周期问题,并确保在使用属性之前,从中获取属性值的容器已经启动。

如果希望继续注入DynamicPropertyRegistry(冒着遇到上述生命周期问题的风险),请将spring.testcontainers.dynamic-property-registry-injection设置为warnallow。前者将记录警告,同时允许使用注入的DynamicPropertyRegistry。后者将默默地允许使用注入的DynamicPropertyRegistry,完全恢复Spring Boot 3.3的行为。

@AutoConfigureTestDatabase与容器

@AutoConfigureTestDatabase注释现在尝试检测数据库是否来自容器。如果要将该注释与容器数据库一起使用,这应该消除添加replace=Replace.NONE的需要。

如果需要恢复旧行为,请在注释上设置replace=Replace.AUTO_CONFIGURED

控制对Actuator端点的访问

启用和禁用端点的支持已被重新设计,用更细粒度的访问模型取代了之前提供的开/关支持。新模型除了支持禁用端点(访问权限为none)和完全启用端点(访问权限为unrestricted)之外,还支持仅允许对端点操作进行read-only访问。

以下属性已被弃用:

  • management.endpoints.enabled-by-default
  • management.endpoint.<id>.enabled

它们的替代品是:

  • management.endpoints.access.default
  • management.endpoint.<id>.access

同样,@Endpoint上的enableByDefault属性已被弃用,新的defaultAccess属性取代了它。

作为这些更改的一部分,enabled-by-default现在始终如一地应用,并且与@ConditionalOnEnabledEndpoint的使用无关。如果在升级时失去对端点的访问权限,请将management.endpoint.<id>.access设置为read-onlyunrestricted,或者将management.endpoint.<id>.enabled设置为true以使端点再次可访问。

此外,引入了一个新属性,允许操作员控制对Actuator端点的允许访问级别:
management.endpoints.access.max-permitted

此属性限制了可能为端点配置的任何访问权限。例如,如果management.endpoints.access.max-permitted设置为read-only,而management.endpoint.loggers.access设置为unrestricted,则仅允许对日志记录器端点进行只读访问。

Cloud Foundry条件端点暴露

@ConditionalOnAvailableEndpoint一起使用的EndpointExposure.CLOUD_FOUNDRY枚举值已被弃用,取而代之的是EndpointExposure.WEB。典型的Spring Boot应用程序可能不会受到此更改的影响,但是,如果您有自定义的特定于Cloud Foundry的Actuator端点bean,则应更新条件以使用EndpointExposure.WEB

HtmlUnit 4.3

HtmlUnit已升级到4.3。随着此次升级,依赖坐标从net.sourceforge.htmlunit:htmlunit更改为org.htmlunit:htmlunit,包名从com.gargoylesoftware.htmlunit更改为org.htmlunit。升级时,请相应地更新构建配置和导入。

Selenium HtmlUnit 4.22

Selenium HtmlUnit已更新到4.22。随着此次升级,依赖坐标从org.seleniumhq.selenium:htmlunit-driver更改为org.seleniumhq.selenium:htmlunit3-driver。升级时,请相应地更新构建配置。

WebJars定位器集成

为了加快启动时间并高效解析WebJars资产,您需要更新pom.xml/build.gradle以依赖org.webjars:webjars-locator-lite而不是org.webjars:webjars-locator-core(这两个依赖项均由Spring Boot管理)。请注意,Spring中对org.webjars:webjars-locator-core的支持现已弃用,并将在未来版本中删除。请参阅此功能的参考文档部分。

OkHttp依赖管理已移除

Spring Boot不再依赖OkHttp,因此不再管理其版本。如果您的应用程序有OkHttp依赖项,请更新其构建以使用满足其需求的OkHttp版本。

Netty在原生镜像中

Spring Boot 3.4使用的Netty版本尚未得到Native Build Tools中包含的GraalVM可达性元数据的支持。要使Netty在原生镜像中工作,您需要手动升级GraalVM可达性元数据版本。

对于Maven:

<plugin><groupId>org.graalvm.buildtools</groupId><artifactId>native-maven-plugin</artifactId><configuration><metadataRepository><version>0.3.14</version></metadataRepository></configuration>
</plugin>

对于Gradle:

graalvmNative {metadataRepository {version = '0.3.14'}
}

Spring Boot 3.2中的弃用内容

在Spring Boot 3.2中被弃用并标记为在3.4中删除的类、方法和属性已在本版本中删除。在升级之前,请确保您没有调用弃用的方法。

最低要求更改

Gradle

Gradle 7.5、8.0、8.1、8.2和8.3不再受支持。现在需要Gradle 7.x(7.6.4或更高版本)或Gradle 8.x(8.4或更高版本)。

新特性和值得注意的地方

结构化日志记录

引入了对结构化日志记录的支持,内置支持Elastic Common Schema(ecs)、Graylog Extended Log Format(gelf)和Logstash(logstash)。要启用结构化文件日志记录,请将logging.structured.format.file设置为ecsgelflogstash。类似地,要启用结构化控制台日志记录,请设置logging.structured.format.console

要了解有关Spring Boot对结构化日志记录的支持,包括如何定义自定义格式,请参阅参考文档。

@Fallback Beans

@ConditionalOnSingleCandidate现在支持@Fallback beans。如果有单个主bean,或者如果没有主bean但有单个非回退bean,则条件将匹配。

定义其他Beans

在类型匹配时,基于bean的条件现在将忽略任何不是默认候选者的bean。通过声明一个bean不是默认候选者(使用@Bean(defaultCandidate=false)),现在可以定义一个自动配置类型的bean,而不会导致相同类型的自动配置bean退出。这减少了在同一应用程序中使用两个DataSource bean或两个EntityManagerFactory bean等所需的配置。

ClientHttpRequestFactory构建器

添加了一个新的ClientHttpRequestFactoryBuilder接口,允许您为特定技术构建ClientHttpRequestFactory实例。构建器允许对底层组件进行细粒度的自定义,以及一种一致的方式来应用常见设置。

可以使用接口的静态工厂方法为特定库创建以下构建器:

  • Apache HTTP Components(ClientHttpRequestFactoryBuilder.httpComponents()
  • Jetty Client(ClientHttpRequestFactoryBuilder.jetty()
  • Reactor Netty HttpClientClientHttpRequestFactoryBuilder.reactor()
  • JDK HttpClientClientHttpRequestFactoryBuilder.jdk()
  • 简单JDK HttpURLConnectionClientHttpRequestFactoryBuilder.simple()

有关更多详细信息,包括如何使用配置属性应用常见设置,请参阅更新的参考文档。

可观察性改进

应用程序组

新的spring.application.group属性可用于将应用程序分组在一起,例如,如果它们都属于某个业务单元或一个更大的应用程序安排。设置此属性时,它也会包含在日志消息中。此行为可以使用属性logging.include-application.group进行控制。应用程序组也会自动添加到OpenTelemetry Resource中。

OTLP

现在可以通过gRPC传输发送OTLP跨度。为此,请将新的配置属性management.otlp.tracing.transport设置为grpc。此属性默认为http。也为此添加了服务连接支持。

management.otlp.logs下的新属性可用于自动配置OpenTelemetry的OtlpHttpLogRecordExporterSdkLoggerProvider

其他可观察性更新

ProcessInfoContributor现在还显示有关堆和非堆使用情况的内存信息。

新的management.otlp.tracing.export.enabledmanagement.wavefront.tracing.export.enabledmanagement.zipkin.tracing.export.enabled属性现在可以更精细地启用或禁用跟踪导出。

AssertJ对MockMvc的支持

当AssertJ在类路径上时,提供对MockMvcTester的自动配置。MockMvcTester允许您使用流畅的API定义请求和断言。它可以注入到任何有MockMvc的地方。

有关更多详细信息,请参阅Spring Framework参考文档的专用部分。

Spring Pulsar

现在提供了用于配置默认租户和命名空间的配置属性。当使用不完全限定的主题URL消费或生产消息时,将应用默认值。使用spring.pulsar.defaults.topic.tenantspring.pulsar.defaults.topic.namespace配置属性进行配置,或者定义自己的PulsarTopicBuilder bean。设置spring.pulsar.defaults.topic.enabled=false可禁用默认值。

添加了一个新的PulsarContainerFactoryCustomizer接口,以支持对自动配置的PulsarContainerFactory进行自定义。

spring.pulsar.consumer.subscription.name配置属性现在适用于自动配置的Pulsar监听器容器。

引入了两个新的配置属性,用于配置Pulsar客户端的并发:

  • spring.pulsar.client.threads.io控制用于处理与代理的连接的线程数。
  • spring.pulsar.client.threads.listener控制用于消息监听器的线程数。

最后,新的spring.pulsar.listener.concurrency属性可用于控制自动配置的Pulsar消息监听器容器的并发。

Couchbase身份验证

现在可以使用客户端证书对Couchbase集群进行身份验证,作为基本用户名和密码身份验证的替代方法。有关更多详细信息,请参阅参考文档。

FreeMarker

现在可以自定义自动配置的FreeMarker的Configuration对象使用的FreeMarker变量。为此,定义一个或多个类型为FreeMarkerVariablesCustomizer的bean。这些bean将按照定义的顺序(如果有)被调用。

带有ActiveMQ Classic的嵌入式代理支持

由于ActiveMQ Classic现在再次支持嵌入式代理,自动配置已更新以支持它。

请注意,与Spring Boot 2.7.x相反,ActiveMQ启动器仅为客户端。要使用嵌入式代理,应将org.apache.activemq:activemq-broker添加到您的应用程序中。

配置元数据

注释处理器现在可以检测Enum的默认值。如果您添加了手动元数据来提供自定义属性的值,请确保将其删除。

弃用和替换自动配置类

为了更轻松地演进自动配置,引入了对弃用和替换自动配置类的支持。可以在新的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.replacements文件中声明替换。要了解更多信息,请参阅参考文档。

虚拟线程

如果启用了虚拟线程,以下组件现在将使用它们:

  • OtlpMeterRegistry
  • Undertow Web服务器

镜像构建改进

Spring Boot现在默认使用paketobuildpacks/builder-jammy-java-tiny。此构建器开箱即支持ARM和x64平台。

在用于构建OCI镜像的Maven和Gradle插件中添加了一个trustBuilder选项。此选项控制如何调用CNB生命周期,在使用来自不可信源的构建器时提供更高的安全性。默认情况下,来自Paketo项目、Heroku和Google的构建器是受信任的。有关信息,请参阅Maven或Gradle文档。

在用于构建OCI镜像的Maven和Gradle插件中添加了一个imagePlatform选项。此选项可用于指定为运行CNB构建包而拉取的任何CNB构建器、运行时和构建包镜像的操作系统和架构。当主机平台支持模拟其他操作系统/架构时(例如,在使用Apple硅芯片的Mac上使用Rosetta模拟ARM主机上的AMD架构),可以使用此选项为与主机平台不同的操作系统和架构构建镜像。有关更多信息,请参阅Maven或Gradle文档。

Docker Compose改进

  • 多配置文件支持:Docker Compose现在支持多个Docker Compose配置文件。
  • 命令行参数改进
    • 新增spring.docker.compose.start.argumentsspring.docker.compose.stop.arguments属性,可用于指定启动和停止服务时传递给Docker Compose子命令的额外命令行参数。
    • 新增spring.docker.compose.arguments属性,用于向Docker Compose传递参数。

更新的支持

  • 支持Postgres的POSTGRES_HOST_AUTH_METHOD=trust环境变量。
  • 分别使用redis/redis-stackredis/redis-stack-server容器镜像,添加了对Redis Stack和Redis Stack Server的支持。
  • 使用grafana/otel-lgtm容器镜像,添加了对Grafana LGTM的支持。
  • 增加了对Hazelcast(使用HazelcastConnectionDetails)的支持。
  • 支持OTLP日志记录。

测试容器改进

  • 支持org.testcontainers.kafka.KafkaContainer
  • 分别使用redis/redis-stackredis/redis-stack-server容器镜像,添加了对Redis Stack和Redis Stack Server的支持。
  • 支持org.testcontainers.grafana.LgtmStackContainer
  • 支持Hazelcast(使用HazelcastConnectionDetails)。
  • 支持OTLP日志记录。
  • 支持RedisContainer

Actuator

可插拔的Actuator暴露器

现在可以扩展Spring Boot,以可插拔的方式暴露Actuator端点。可以实现新的EndpointExposureOutcomeContributor接口来影响@ConditionalOnAvailableEndpoint条件。此扩展应使其更容易提供与现有Cloud Foundry支持类似的其他平台集成。

SSL信息和健康检查

如果使用SSL捆绑包,现在在/actuator/info下有一个新的端点显示SSL信息(有效期、颁发者、主题等)。此端点还会显示即将过期的证书,以提醒您需要尽快轮换它们。有一个新的配置属性management.health.ssl.certificate-validity-warning-threshold可用于配置阈值。还添加了一个新的健康检查来监控SSL证书。如果证书无效,它将状态设置为OUT_OF_SERVICE

/actuator/scheduledtasks端点的额外信息

/scheduledtasks Actuator端点现在公开有关计划任务的额外元数据,例如“下一次计划执行时间”和“上次执行时间、状态和异常”。

依赖升级

Spring Boot 3.4迁移到了多个Spring项目的新版本:

  • Spring AMQP 3.2
  • Spring Authorization Server 1.4
  • Spring Batch 5.2
  • Spring Data 2024.1
  • Spring Framework 6.2
  • Spring HATEOAS 2.4
  • Spring Integration 6.4
  • Spring Kafka 3.3
  • Spring Pulsar 1.2
  • Spring Security 6.4
  • Spring Session 3.4

众多第三方依赖也已更新,其中一些更值得注意的如下:

  • Apache Http Client 5.4
  • AssertJ 3.26
  • Artemis 2.37
  • Elasticsearch Client 8.15
  • Flyway 10.20
  • Gson 2.11
  • Hibernate 6.6
  • HtmlUnit 4.5.0
  • JUnit Jupiter 5.11
  • Jackson 2.18.0
  • Jedis 5.2
  • Kafka 3.8
  • Lettuce 6.4
  • Liquibase 4.29
  • Log4j 2.24
  • HtmlUnit 4.3
  • MariaDB 3.4
  • Micrometer 1.14
  • Micrometer Tracing 1.4
  • Mockito 5.13
  • MongoDB 5.2.0
  • MySQL 9.1
  • OpenTelemetry 1.41
  • Oracle Database 23.4
  • R2DBC MySQL 1.3
  • Rabbit AMQP Client 5.22
  • Rabbit Stream Client 0.18.0
  • Reactor 2024.0
  • Selenium 4.25
  • Testcontainers 1.20.3
  • XMLUnit 2.10

杂项

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

  • 现在可以使用Customizer<Liquibase> bean在Liquibase使用之前对其进行自定义。
  • 用于创建JCache CacheManager的属性现在可以通过定义JCachePropertiesCustomizer bean进行自定义。
  • Spring MVC使用的RequestToViewNameTranslator现在可以通过定义名为viewNameTranslator的bean进行自定义。
  • Lettuce的ClientOptions现在可以使用LettuceClientOptionsBuilderCustomizer bean进行自定义。要对整个LettuceClientConfiguration进行更广泛的配置,请继续使用LettuceClientConfigurationBuilderCustomizer
  • 新的自定义器ProxyConnectionFactoryCustomizer可用于自定义R2DBC ProxyConnectionFactory
  • 如果发生Spring Security注销,现在会发布一个审计事件。
  • JavaMailSender上的TLS现在可以使用新的属性spring.mail.ssl.*通过SSL捆绑包进行配置。
  • GSON的严格性现在可以使用新的spring.gson.strictness属性进行配置。
  • @Name现在可以用于JavaBean风格的配置属性的字段上,以自定义其名称。
  • 当从另一个DataSource派生时,如果源DataSource不公开驱动程序类名,DataSourceBuilder现在可以使用源DataSource的URL确定驱动程序类名。
  • 在Cloud Foundry平台上,现在自动启用活跃度和就绪度健康探测。
  • 新的属性spring.application.version可用于读取和设置应用程序版本。该属性的默认值取自清单的Implementation-Version
  • 自动配置的EntityManagerFactoryBuilder也定义了原生(例如Hibernate)属性。
  • Spring Integration的TaskScheduler现在即使没有使用@EnableScheduling也能感知虚拟线程。
  • @ConditionalOnAvailableEndpoint现在有一个value别名用于endpoint
  • 添加了一个新的配置属性spring.data.web.pageable.serialization-mode,用于配置Spring Data Web的序列化模式。
  • 当使用SpringApplication.from(…​)语法时,现在可以指定要激活的其他配置文件。
  • Spring Boot插件不再在构建包环境中设置BP_NATIVE_IMAGE: true
  • 注册的@ConfigurationProperties bean现在尊重@DependsOn@Description@Fallback@Lazy@Primary@Scope@Role注释。
  • Log4j2的MultiFormatStringBuilderFormattable现在在结构化日志记录中受支持。
  • 添加了一个新的配置属性spring.jms.listener.max-messages-per-task,用于配置监听器在一个任务中处理的最大消息数。
  • 默认安全配置现在公开映射到其他路径的健康组。此外,两个EndpointRequest类现在都提供toAdditionalPaths(…​)方法。
  • 会话cookie的分区属性现在可以通过属性设置。
  • 添加了一个新的server.jetty.max-form-keys属性,用于自定义Jetty的最大表单键数。
  • 添加了新的属性management.otlp.logging.connect-timeoutmanagement.otlp.tracing.connect-timeout,用于配置到OTLP收集器的连接超时。
  • 当通过OTLP发送日志时,添加了对gRPC传输的支持。
  • 当绑定构建过程中构建包使用的容器中的目录时,现在会显示警告。
  • 当使用--enable-sbom=sbom构建原生镜像时,现在会自动检测此SBOM。
  • DatabaseDriver枚举现在支持ClickHouse JDBC驱动程序。
  • 新的属性management.logging.export.enabledmanagement.otlp.logging.export.enabled可用于禁用日志导出。
  • Spring Batch使用的TaskExecutor现在可以通过定义一个带有@BatchTaskExectuor注释的TaskExecutor bean进行自定义。
  • Spring Session自动配置现在在反应式Web应用程序中支持indexed存储库类型。
  • 如果未配置池暂停且创建了检查点,HikariCheckpointRestoreLifecycle将记录警告。

Spring Boot 3.4中的弃用内容

  • spring.gson.lenient,改用spring.gson.strictness
  • @MockBean@SpyBean,分别改用Spring Framework的@MockitoBeanMockitoSpyBean
  • org.springframework.boot.ResourceBanner#getApplicationVersion(Class<?>),改用spring.application.version属性。
  • org.springframework.boot.SpringApplication#logStartupInfo(boolean),改用org.springframework.boot.SpringApplication#logStartupInfo(ConfigurationApplicationContext)
  • org.springframework.boot.logging.logback.ApplicationNameConverter,改用org.springframework.boot.logging.logback.EnclosedInSquareBracketsConverter
  • org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#CLOUD_FOUNDRY,改用org.springframework.boot.actuate.autoconfigure.endpoint.expose.EndpointExposure#WEB
  • org.springframework.boot.actuate.autoconfigure.tracing.otlp.OtlpTracingConnectionDetails#getUrl(),改用getUrl(Transport)
  • org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryAutoConfiguration,改用org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryTracingAutoConfiguration
  • OtlpAutoConfiguration,改用OtlpTracingAutoConfiguration
  • management.endpoints.enabled-by-defaultmanagement.endpoint.<id>.enabled,分别改用management.endpoints.access.defaultmanagement.endpoint.<id>.access
  • @Endpoint上的enableByDefault,改用defaultAccess

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

android 11添加切换分屏功能

引言 自Android 7开始官方就支持分屏显示,但没有切换分屏的功能,即交换上下屏幕。直到Android 13开始才支持切换分屏,操作方式是:分屏模式下双击中间分割线就会交换上下屏位置。本文的目的就是在Android 11上实现切换分屏的功能。 下图是Android13切换分屏演示 切换分屏…

PyTorch基础05_模型的保存和加载

目录 一、模型定义组件——重构线性回归 二、模型的加载和保存 2、序列化保存对象和加载 3、保存模型参数 一、模型定义组件——重构线性回归 回顾之前的手动构建线性回归案例&#xff1a; 1.构建数据集&#xff1b;2.加载数据集(数据集转换为迭代器)&#xff1b;3.参数初…

JavaScript核心语法(3)

前两篇文章大概把JavaScript的基础语法讲了一下&#xff0c;这篇文章主要讲讲ES6的核心语法。ES6的核心语法说实话其实有点多&#xff0c;我重点挑一些经常在项目中用到的来讲&#xff0c;其他一些我没怎么见过的就不讲了。 目录 1.变量和常量 变量&#xff08;let 和 var&a…

爬虫开发(5)如何写一个CSDN热门榜爬虫小程序

笔者 綦枫Maple 的其他作品&#xff0c;欢迎点击查阅哦~&#xff1a; &#x1f4da;Jmeter性能测试大全&#xff1a;Jmeter性能测试大全系列教程&#xff01;持续更新中&#xff01; &#x1f4da;UI自动化测试系列&#xff1a; SeleniumJava自动化测试系列教程❤ &#x1f4da…

NIO三大组件

现在互联网环境下&#xff0c;分布式系统大相径庭&#xff0c;而分布式系统的根基在于网络编程&#xff0c;而netty恰恰是java领域的网络编程的王者&#xff0c;如果要致力于并发高性能的服务器程序、高性能的客户端程序&#xff0c;必须掌握netty网络编程。 NIO基础 NIO是从ja…

34 基于单片机的指纹打卡系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52RC&#xff0c;采用两个按键替代指纹&#xff0c;一个按键按下&#xff0c;LCD12864显示比对成功&#xff0c;则 采用ULN2003驱动步进电机转动&#xff0c;表示开门&#xff0c;另一个…

李宏毅机器学习课程知识点摘要(14-18集)

线性回归&#xff0c;逻辑回归&#xff08;线性回归sigmoid&#xff09;&#xff0c;神经网络 linear regression &#xff0c; logistic regression &#xff0c; neutral network 里面的偏导的相量有几百万维&#xff0c;这就是neutral network的不同&#xff0c;他是…

文件上传upload-labs-docker通关

&#xff08;图片加载不出&#xff0c;说明被和谐了&#xff09; 项目一&#xff1a; sqlsec/ggctf-upload - Docker Image | Docker Hub 学习过程中,可以对照源码进行白盒分析. 补充&#xff1a;环境搭建在Linux虚拟机上的同时&#xff0c;以另一台Windows虚拟机进行测试最…

【Android】静态广播接收不到问题分析思路

参考资料&#xff1a; Android 静态广播注册流程(广播2)-CSDN博客 Android广播发送流程(广播3)_android 发送广播-CSDN博客 https://zhuanlan.zhihu.com/p/347227068 在Android中&#xff0c;静态广播如果静态广播不能接收&#xff0c;我们可以从整个流程中去分析&#xff…

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)

在当下&#xff0c; 日益发展的时代&#xff0c;宠物的数量应该均为稳步上升&#xff0c;在美国出现了下降的趋势&#xff0c; 中国 2019-2020 年也下降&#xff0c;这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的额…

Git简单介绍

一、 Git介绍与安装 1.1 Git简介 Git是一个开源的分布式版本控制系统&#xff0c;可以有效、高速地处理从很小到非常大的项目版本管理。 1.2集中式(SVN&#xff09; VS 分布式(git) 集中式版本控制系统&#xff0c;版本库是集中存放在中央服务器的&#xff0c;工作时要先从中央…

CSS之3D转换

三维坐标系 三维坐标系其实就是指立体空间&#xff0c;立体空间是由3个轴共同组成的。 x轴:水平向右注意:x右边是正值&#xff0c;左边是负值 y轴:垂直向下注意:y下面是正值&#xff0c;上面是负值 z轴:垂直屏幕注意:往外面是正值&#xff0c;往里面是负值 3D移动 translat…

kafka生产者和消费者命令的使用

kafka-console-producer.sh 生产数据 # 发送信息 指定topic即可 kafka-console-producer.sh \ --bootstrap-server bigdata01:9092 \ --topic topicA # 主题# 进程 29124 ConsoleProducer kafka-console-consumer.sh 消费数据 # 消费数据 kafka-console-consumer.sh \ --boo…

基于Springboot的心灵治愈交流平台系统的设计与实现

基于Springboot的心灵治愈交流平台系统 介绍 基于Springboot的心灵治愈交流平台系统&#xff0c;后端框架使用Springboot和mybatis&#xff0c;前端框架使用Vuehrml&#xff0c;数据库使用mysql&#xff0c;使用B/S架构实现前台用户系统和后台管理员系统&#xff0c;和不同级别…

【人工智能】Python常用库-Scikit-learn常用方法教程

Scikit-learn 是一个功能强大的机器学习库&#xff0c;支持数据预处理、分类、回归、聚类、降维等功能&#xff0c;广泛用于模型开发与评估。以下是 Scikit-learn 的常用方法及详细说明。 1. 安装与导入 安装 Scikit-learn&#xff1a; pip install scikit-learn导入基本模块…

Tcon技术和Tconless技术介绍

文章目录 TCON技术&#xff08;传统时序控制器&#xff09;定义&#xff1a;主要功能&#xff1a;优点&#xff1a;缺点&#xff1a; TCONless技术&#xff08;无独立时序控制器&#xff09;定义&#xff1a;工作原理&#xff1a;优点&#xff1a;缺点&#xff1a; TCON与TCONl…

计算机基础(下)

内存管理 内存管理主要做了什么&#xff1f; 操作系统的内存管理非常重要&#xff0c;主要负责下面这些事情&#xff1a; 内存的分配与回收&#xff1a;对进程所需的内存进行分配和释放&#xff0c;malloc 函数&#xff1a;申请内存&#xff0c;free 函数&#xff1a;释放内存…

【青牛科技】TS223 单触摸键检测IC

概 述 &#xff1a; TS223是 触 摸 键 检 测 IC&#xff0c; 提 供 1个 触 摸 键 。 触 摸 检 测 IC是 为 了用 可 变 面 积 的 键 取 代 传 统 的 按 钮 键 而 设 计 的 。低 功 耗 和 宽 工 作 电压是 触 摸 键 的 DC和 AC特 点 。TS223采 用 SSOP16、 SOT23-6的 封 装 形 式…

CUDA补充笔记

文章目录 一、不同核函数前缀二、指定kernel要执行的线程数量三、线程需要两个内置坐标变量来唯一标识线程四、不是blocksize越大越好&#xff0c;上限一般是1024个blocksize 一、不同核函数前缀 二、指定kernel要执行的线程数量 总共需要线程数是&#xff1a; 1 * N N个线程…

“华为杯”研究生数学建模比赛历年赛题汇总(2004-2024)

文章目录 赛题链接历年赛题2004年赛题2005年赛题2006年赛题2007年赛题2008年赛题2009年赛题2010年赛题2011年赛题2012年赛题2013年赛题2014年赛题2015年赛题2016年赛题2017年赛题2018年赛题2019年赛题2020年赛题2020年赛题2021年赛题2022年赛题2023年赛题2024年赛题 赛题链接 部…