当前位置: 首页 > news >正文

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

相关文章:

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

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…...

【网络安全】

黑客入侵 什么是黑客入侵&#xff1f; “黑客”是一个外来词&#xff0c;是英语单词hacker的中文音译。最初&#xff0c;“黑客”只是一个褒义词&#xff0c;指的是那些尽力挖掘计算机程序最大潜力的点脑精英&#xff0c;他们讨论软件黑客的技巧和态度&#xff0c;以及共享文化…...

在SQLyog中导入和导出数据库

导入 假如我要导入一个xxx.sql&#xff0c;我就先创建一个叫做xxx的数据库。 然后右键点击导入、执行SQL脚本 选择要导入的数据库文件的位置&#xff0c;点击执行即可 注意&#xff1a; 导入之后记得刷新一下导出 选择你要导出的数据库 右键选择&#xff1a;备份/导出、…...

RabbitMQ简单应用

概念 RabbitMQ 是一种流行的开源消息代理&#xff08;Message Broker&#xff09;软件&#xff0c;它实现了高级消息队列协议&#xff08;AMQP - Advanced Message Queuing Protocol&#xff09;。RabbitMQ 通过高效的消息传递机制&#xff0c;主要应用于分布式系统中解耦应用…...

使用LUKS对Linux磁盘进行加密

前言 本实验用于日常学习用&#xff0c;如需对存有重要数据的磁盘进行操作&#xff0c;请做好数据备份工作。 此实验只是使用LUKS工具的冰山一角&#xff0c;后续还会有更多功能等待探索。 LUKS&#xff08;Linux Unified Key Setup&#xff09;是Linux系统中用于磁盘加密的一…...

戴尔电脑安装centos7系统遇到的问题

1&#xff0c;找不到启动盘&#xff08;Operation System Loader signature found in SecureBoot exclusion database(‘dbx’).All bootable devices failed secure Boot Verification&#xff09; 关闭 Secure Boot&#xff08;推荐&#xff09;&#xff1a; 进入 BIOS/UEFI…...

3.4.SynchronousMethodHandler组件之ResponseHandler

前言 feign发送完请求后, 拿到返回结果, 那么这个返回结果肯定是需要经过框架进一步处理然后再返回到调用者的, 其中ResponseHandler就是用来处理这个返回结果的, 这也是符合正常思维的处理方式, 例如springmvc部分在调用在controller端点前后都会增加扩展点。 从图中可以看得…...

Linux 下进程的状态

操作系统中常见进程状态 在操作系统中有六种常见进程状态: 新建状态: 进程正在被创建. 此时操作系统会为进程分配资源, 如: 内存空间等, 进行初始化就绪状态: 进程已经准备好运行了, 只需要等待被调度, 获取 CPU 资源就可以执行了, 操作系统中可能同时存在多个进程处于就绪状…...

【计算机网络】核心部分复习

目录 交换机 v.s. 路由器OSI七层更实用的TCP/IP四层TCPUDP 交换机 v.s. 路由器 交换机-MAC地址 链接设备和设备 路由器- IP地址 链接局域网和局域网 OSI七层 物理层&#xff1a;传输设备。原始电信号比特流。数据链路层&#xff1a;代表是交换机。物理地址寻址&#xff0c;交…...

Spring Boot开发实战:从入门到构建高效应用

Spring Boot 是 Java 开发者构建微服务、Web 应用和后端服务的首选框架之一。其凭借开箱即用的特性、大量的自动化配置和灵活的扩展性&#xff0c;极大简化了开发流程。本文将以实战为核心&#xff0c;从基础到高级&#xff0c;全面探讨 Spring Boot 的应用开发。 一、Spring B…...

pyshark安装使用,ubuntu:20.04

1.容器创建 命令 docker run -d --name pyshark -v D:\src:/root/share ubuntu:2004 /bin/bash -c "while true;do sleep 1000;done" 用于创建并启动一个新的 Docker 容器。 docker run -d --name pyshark -v D:\src:/root/share ubuntu:2004 /bin/bash -c "w…...

基本功能实现

目录 1、环境搭建 2、按键控制灯&电机 LED 电机 垂直按键(机械按键) 3、串口调试功能 4、定时器延时和定时器中断 5、振动强弱调节 6、万年历 7、五方向按键 1、原理及分析 2、程序设计 1、环境搭建 需求: 搭建一个STM32F411CEU6工程 分析: C / C 宏定义栏…...

《那个让服务器“跳舞”的bug》

在程序的世界里&#xff0c;bug 就像隐藏在暗处的小怪兽&#xff0c;时不时跳出来捣乱。而在我的职业生涯中&#xff0c;有一个bug让我至今难忘&#xff0c;它不仅让项目差点夭折&#xff0c;还让我熬了无数个通宵。这个故事发生在一个风和日丽的下午&#xff0c;我们正在开发一…...

Python 网络爬虫进阶:动态网页爬取与反爬机制应对

在上一篇文章中&#xff0c;我们学习了如何使用 Python 构建一个基本的网络爬虫。然而&#xff0c;在实际应用中&#xff0c;许多网站使用动态内容加载或实现反爬机制来阻止未经授权的抓取。因此&#xff0c;本篇文章将深入探讨以下进阶主题&#xff1a; 如何处理动态加载的网…...

创建可直接用 root 用户 ssh 登陆的 Docker 镜像

有时候我们在 Mac OS X 或 Windows 平台下需要开发以 Linux 为运行时的应用&#xff0c;IDE 或可直接使用 Docker 容器&#xff0c;或 SSH 远程连接。本地命令行下操作虽然可以用 docker exec 连接正在运行的容器&#xff0c;但 IDE 远程连接的话 SSH 总是一种较为通用的连接方…...

wordpress 中添加图片放大功能

功能描述 使用 Fancybox 实现图片放大和灯箱效果。自动为文章内容中的图片添加链接&#xff0c;使其支持 Fancybox。修改了 header.php 和 footer.php 以引入必要的 CSS 和 JS 文件。在 functions.php 中通过过滤器自动为图片添加 data-fancybox 属性。 最终代码 1. 修改 hea…...

数据结构 (7)线性表的链式存储

前言 线性表是一种基本的数据结构&#xff0c;用于存储线性序列的元素。线性表的存储方式主要有两种&#xff1a;顺序存储和链式存储。链式存储&#xff0c;即链表&#xff0c;是一种非常灵活和高效的存储方式&#xff0c;特别适用于需要频繁插入和删除操作的场景。 链表的基本…...

库的操作.

创建、删除数据库 创建语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name[ ]是可选项&#xff0c;IF NOT EXISTS 是表明如果不存在才能创建数据库 //查看数据库&#xff0c;假设7行 show databases; //创建数据库 --- 本质在Linux创建一个目录 create database databa…...

Vue进阶之Vue CLI服务—@vue/cli-service Vuex

Vue CLI服务—vue/cli-service & Vuex vue/cli-service初识bin/vue-cli-service.js代码执行解读 Vuexgenerator/index.jsstore/index.js插件化的能力怎么引入呢&#xff1f; vue/cli-service 初识 第一块是上一个讲述的cli是把我们代码的配置项&#xff0c;各种各样的插件…...

导入100道注会cpa题的方法,导入试题,自己刷题

一、问题描述 复习备考的小伙伴们&#xff0c;往往希望能够利用零碎的时间和手上的试题&#xff0c;来复习和备考 用一个能够导入自己试题的刷题工具&#xff0c;既能加强练习又能利用好零碎时间&#xff0c;是一个不错的解决方案 目前市面上刷题工具存下这些问题 1、要收费…...

云计算——弹性云计算器(ECS)

弹性云服务器&#xff1a;ECS 概述 云计算重构了ICT系统&#xff0c;云计算平台厂商推出使得厂家能够主要关注应用管理而非平台管理的云平台&#xff0c;包含如下主要概念。 ECS&#xff08;Elastic Cloud Server&#xff09;&#xff1a;即弹性云服务器&#xff0c;是云计算…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

GitHub 趋势日报 (2025年06月06日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 590 cognee 551 onlook 399 project-based-learning 348 build-your-own-x 320 ne…...

Python常用模块:time、os、shutil与flask初探

一、Flask初探 & PyCharm终端配置 目的: 快速搭建小型Web服务器以提供数据。 工具: 第三方Web框架 Flask (需 pip install flask 安装)。 安装 Flask: 建议: 使用 PyCharm 内置的 Terminal (模拟命令行) 进行安装,避免频繁切换。 PyCharm Terminal 配置建议: 打开 Py…...

41道Django高频题整理(附答案背诵版)

解释一下 Django 和 Tornado 的关系&#xff1f; Django和Tornado都是Python的web框架&#xff0c;但它们的设计哲学和应用场景有所不同。 Django是一个高级的Python Web框架&#xff0c;鼓励快速开发和干净、实用的设计。它遵循MVC设计&#xff0c;并强调代码复用。Django有…...

大数据驱动企业决策智能化的路径与实践

&#x1f4dd;个人主页&#x1f339;&#xff1a;慌ZHANG-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 一、引言&#xff1a;数据驱动的企业竞争力重构 在这个瞬息万变的商业时代&#xff0c;“快者胜”的竞争逻辑愈发明显。企业如何在复杂环…...

Qwen系列之Qwen3解读:最强开源模型的细节拆解

文章目录 1.1分钟快览2.模型架构2.1.Dense模型2.2.MoE模型 3.预训练阶段3.1.数据3.2.训练3.3.评估 4.后训练阶段S1: 长链思维冷启动S2: 推理强化学习S3: 思考模式融合S4: 通用强化学习 5.全家桶中的小模型训练评估评估数据集评估细节评估效果弱智评估和民间Arena 分析展望 如果…...