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-namefalse

1.3 自动配置的用户详细信息服务

若在类路径存在 spring-security-oauth2-clientspring-security-oauth2-resource-serverspring-security-saml2-service-provider 中的一个或多个,而且从 3.2.2 开始,既没有配置 spring.security.user.name 也没有配置 spring.security.user.password,则自动配置的 InMemoryUserDetailsManager 现在将退出。同样,在反应式应用程序中,如果在类路径上存在 spring-security-oauth2-clientspring-security-oauth2-resource-server 中的一个或多个,而且从 3.2.2 开始,既没有配置 spring.security.user.name 也没有配置 spring.security.user.password,则自动配置的 MapReactiveUserDetailsService 现在也将退出。

如果您正在使用上述依赖项之一,但仍然需要在应用程序中使用 InMemoryUserDetailsManagerMapReactiveUserDetailsService,请在应用程序中定义所需的 bean,或者从 Spring Boot 3.2.2 开始,配置 spring.security.user.namespring.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.JarLauncher
org.springframework.boot.loader.launch.PropertiesLauncherorg.springframework.boot.loader.PropertiesLauncher
org.springframework.boot.loader.launch.WarLauncherorg.springframework.boot.loader.WarLauncher

但是,如果您发现新实现存在任何意外行为,我们也提供了一个回退选项,允许您使用旧代码。

对于 Maven 用户,您可以将 spring-boot-plugin 配置中的 <loaderImplementation> 标签设置为 CLASSIC。例如:

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><executions><execution><goals><goal>repackage</goal></goals><configuration><loaderImplementation>CLASSIC</loaderImplementation></configuration></execution></executions></plugin></plugins>
</build>

1.6 Spring Boot 3.0 中的弃用情况

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

1.7 日志关联 ID

只要使用 Micrometer 跟踪,Spring Boot 就会自动记录关联 ID。参阅更新后的文档。

如果您自己配置了跟踪 id 和 span id 的日志记录,例如以下内容:

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,您必须主动启用:

@Bean
RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {return configurer.configure(new RestTemplateBuilder()).requestFactory((settings) -> ClientHttpRequestFactories.get(JdkClientHttpRequestFactory.class, settings));
}

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 也会保持活动状态。

⑦ 特定技术集成

启用虚拟线程时,以下特定技术集成适用:

  • 为 RabbitMQ 监听器自动配置了一个虚拟线程执行器。
  • 为 Kafka 监听器自动配置了一个虚拟线程执行器。
  • Spring Data Redis 的 ClusterCommandExecutor 将使用虚拟线程。
  • Spring for Apache Pulsar 将为自动配置的 ConcurrentPulsarListenerContainerFactoryDefaultPulsarReaderContainerFactory 使用 VirtualThreadTaskExector

1.12 对 JVM 检查点/恢复的初始支持

Spring Boot 3.2 附带对 JVM 检查点/恢复(Project CRaC)的初始支持。有关更多详细信息,请参阅相关文档。

1.13 SSL 捆绑包重新加载

现在可以在信任材料发生变化时自动重新加载 SSL 捆绑包。捆绑包必须选择启用此功能,将其 reload-on-update 属性设置为 true。捆绑包的使用者也必须支持重新加载。

支持重新加载的使用者包括:

  • Netty Web 服务器
  • Tomcat Web 服务器

有关 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 的自动配置已经改进。如果上下文中有 SdkLoggerProviderSdkMeterProvider 类型的 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 使用的临时构建工作区,以使用绑定挂载或自定义命名卷。有关更多信息和示例,请参阅 Maven 和 Gradle 文档。

安全选项配置

现在可以自定义应用于 CNB 构建器容器的安全选项,以支持不允许使用默认 Linux 安全选项 label=disable 的 Docker 环境。有关更多信息,请参阅 Maven 和 Gradle 文档。

对 Spring for GraphQL 的可调用支持

现在Spring for GraphQL 被自动配置为使用 applicationTaskExecutor。这为控制器方法返回 Callable 提供了开箱即用的支持。

其他 OAuth2 令牌验证器

自动配置的 JwtDecoderReactiveJwtDecoder 现在将使用任何 OAuth2TokenValidator<Jwt> 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.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 数据源上的连接验证

已删除了 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) 的应用程序使用。

其他

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

  • 现在可以使用配置属性 spring.jackson.datatype.enum.spring.jackson.datatype.jsonnode. 分别启用和禁用 Jackson 的 EnumFeatureJsonNodeFeature 中声明的功能。
  • 现在可以通过使用 Provider 为其他构建信息属性设置延迟值。
  • 事务管理器自定义现在适用于任何类型的 TransactionManager,而不仅仅是 PlatformTransactionManager
  • 任何 TransactionExecutionListener bean 现在都会添加到自动配置的事务管理器中。
  • 当嵌入式 WebServer 启动时记录的端口信息已得到改进和统一。
  • 新增加的属性 spring.servlet.multipart.strict-servlet-compliance 用于设置是否仅对 multipart/form-data 请求使用多部分处理。
  • 当欢迎页面的处理程序收到无效的 Accept 头时,已减少日志记录,并会退回到接受所有 MIME 类型。
  • 已添加 RestClientBuilderConfigurer,可用于将 Spring Boot 的默认设置应用于 RestClient.Builder
  • restTemplateBuilderConfigurer bean 不再退出定义了用户 bean。如果您之前有自己的 restTemplateBuilderConfigurer bean,请将其删除。
  • 已添加一个属性,可用于配置 Jetty 服务器的最大连接数。
  • 已添加一个新属性,可用于在使用 PEM SSL 捆绑包时验证密钥。
  • 以编程方式创建 PemSslStoreBundle 时,现在可以提供密钥库密码。
  • 如果未明确设置 service.name,现在将使用 spring.application.name 作为 OpenTelemetry 的 service.name
  • 已添加一个新属性,可用于配置 OTLP 注册表中导出指标的基本 TimeUnit
  • 现在有了 OTLP 指标和跟踪的连接详细信息支持。如果使用 Testcontainers 或 Docker Compose 与 otel/opentelemetry-collector-contrib 镜像,将自动创建连接详细信息 bean。
  • 已添加对使用 Wavefront 时的 CSP 身份验证的支持。
  • 一个新属性 flyway.postgresql.transactional-lock 可用于配置 Flyway 对 PostgreSQL 的事务锁定使用。
  • 添加了对 Kafka MessageListenerContainer changeConsumerThreadName 属性的支持。
  • 自动配置 Function<MessageListenerContainer, String> bean 到 Kafka MessageListenerContainer 的 threadNameSupplier
  • 已引入新的 @ConditionalOnThreading 注解,以帮助自动配置虚拟线程相关的问题。
  • 添加了对 RabbitMQ 容器 forceStop 属性的支持。
  • 基于 WebClient 的 Zipkin 发送器现在会遵守通过配置属性设置的超时。有关详细信息,请参阅 #36264。
  • 当在启用了 AOT 模式但构建中没有进行 AOT 处理的情况下启动应用程序时,错误消息现在更加明确。
  • 在使用 GraalVM 时,现在自动提供了 messages.propertiesmessages_*.properties 的资源提示。
  • 现在提供了 Kotlin 序列化的依赖项管理。
  • Awaitility (org.awaitility:awaitility) 现在是 spring-boot-starter-test 的一部分。
  • 在使用 @JdbcTest@DataJpaTest 的测试中,自动配置的 JdbcClient bean 现在可用。
  • 在自动配置 MockMvc 时,现在使用它们的注册 bean 的分派器类型和初始化参数注册过滤器。
  • 现在可以并行初始化 Testcontainers。为此,请将 spring.testcontainers.beans.startup 设置为 parallel
  • 支持 spring.kafka.template.observation-enabled 属性,以支持 Micrometer 观察。

3.2.0废除的

OkHttp 3 的支持已被弃用,有利于 OkHttp 4

  • spring-boot:runspring-boot:startspring-boot:test-run Maven 目标的 directories 属性已被弃用,有利于 additionalClasspathElements

  • 定义在 LoggingSystemPropertiesLogbackLoggingSystemProperties 中的大多数常量已被弃用,改为使用枚举值。

  • ClientHttpRequestFactorySettingsRestTemplateBuilder 中启用请求缓冲的支持已被弃用。虽然 API 以弃用的形式保留,但配置它将不会产生任何效果,这与 Spring Framework 6.1 中的类似更改一致。

  • 使用 context.initializer.classes 环境属性注册额外的 ApplicationContextInitializer 已被弃用,改为以编程方式或在 spring.factories 中注册每个代理。

  • 使用 context.listener.classes 环境属性注册额外的 ApplicationListener 已被弃用,改为以编程方式或在 spring.factories 中注册每个代理。

  • 由扩展程序管理的 Flyway 属性已移动到专用命名空间。因此,flyway.oracle* 属性已移动到 flyway.oracle.*。同样,spring.flyway.sql-server-kerberos-login-file 已移动到 spring.flyway.sqlserver.kerberos-login-file

  • InfluxDB 的支持已被弃用,有利于新的 InfluxDB Java 客户端及其自己的 Spring Boot 集成。

  • 配置属性 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<?>>)

  • 不再推荐使用 DelegatingApplicationContextInitializerDelegatingApplicationListener,因为基于属性的初始化不再推荐。

  • PemSslStoreBundle 中的一些过时的构造函数以及 PemSslStoreDetails 中的 certificate 访问器已被弃用。

  • TaskExecutorCustomizer 已被弃用,有利于 ThreadPoolTaskExecutorCustomizer

  • TaskSchedulerBuilder 已被弃用,有利于 ThreadPoolTaskSchedulerBuilder

  • TaskSchedulerCustomizer 已被弃用,有利于 ThreadPoolTaskSchedulerCustomizer

  • NettyWebServer 中的一些过时的构造函数已被弃用

    本文由博客一文多发平台 OpenWrite 发布!

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

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

相关文章

【MATLAB】数字滤波器的设计

一、引言 在信号处理过程中&#xff0c;所处理的信号往往混有噪声&#xff0c;从接收到的信号中消除或减弱噪声是信号传输和处理中十分重要的问题。根据有用信号和噪声的不同特性&#xff0c;提取有用信号的过程称为滤波,实现滤波功能的系统称为滤波器。在以往的模拟电路中用的…

OrangePi AIpro测评:智能与创新的完美结合

OrangePi AIpro上手指南 简介 香橙派与华为合作发布的香橙派AiPro为Ai主力&#xff0c;为边缘设备的Ai计算提供了可能。 集成图形处理器&#xff0c;拥有8GB/16GB LPDDR4X&#xff08;我这个是8G内存版本的&#xff09;&#xff0c;可以外接32GB/64GB/128GB/256GB eMMC模块&a…

大模型备案VS算法备案:差异、要求与合规快照

​下图为最新的直至第五批深度合成服务算法备案信息的公告 根据目前公开的国内大模型算法备案统计来看&#xff0c;首批境内深度合成服务算法备案清单&#xff0c;总共通过了五批。 以第二批举例&#xff0c;境内深度合成服务算法备案清单&#xff0c;总共通过110家&#xff0…

拉格朗日插值及牛顿差商方法的实现(Matlab)

一、问题描述 拉格朗日插值及牛顿差商方法的实现。 二、实验目的 掌握拉格朗日插值和牛顿差商方法的原理&#xff0c;能够编写代码实现两种方法&#xff1b;能够分析多项式插值中的误差。 三、实验内容及要求 利用拉格朗日插值及牛顿差商方法估计1980 年的人口&#xff0c;并…

牛!华为《Linux 面试笔记大全》太赞了,完整版PDF 开放下载!

在QQ和微信社群中&#xff0c;我注意到许多人都在寻找一份全面的Linux学习资料。因此&#xff0c;我在这里为大家整理和分类了相关的信息&#xff0c;可以看作是对重点内容的梳理和归纳。 这份《Linux面试笔记》主要分为三大部分&#xff1a;基础篇-进阶篇-高级篇 本书笔记针…

技术速递|宣布 Java on Azure 开发工具支持 Java on Azure Container Apps

作者&#xff1a;Jialuo Gan 排版&#xff1a;Alan Wang 在 Microsoft Build 2024 期间宣布&#xff0c;Azure Container Apps 现在可为 Java 开发人员提供丰富的操作功能。(详细内容请参见本博客&#xff09;。 我们很高兴地与大家分享&#xff0c;Azure Toolkit for Intelli…

【SQL学习进阶】从入门到高级应用(二)

文章目录 简单查询查一个字段查多个字段查所有字段查询时字段可参与数学运算查询时字段可起别名as关键字省略as关键字别名中有空格别名中有中文 &#x1f308;你好呀&#xff01;我是 山顶风景独好 &#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xf…

44、Flink 的 Interval Join 详解

Interval Join Interval join 组合元素的条件为&#xff1a;两个流&#xff08;暂时称为 A 和 B&#xff09;中 key 相同且 B 中元素的 timestamp 处于 A 中元素 timestamp 的一定范围内&#xff0c;即 b.timestamp ∈ [a.timestamp lowerBound; a.timestamp upperBound] 或…

Android 13 配置默认DN

需求&#xff1a; 如果存在用户配置的DNS服务器&#xff0c;则切面拦截运行商下发的DNS,替换为用户自己配置的DNS. 实现&#xff1a; 直接上代码&#xff1a; 1:TelephonyProperties 内新增属性保存用户设置的dns //QSSI.13/frameworks/base/telephony/java/com/android/in…

TCL华星揽获技术创新奖,创新能力与伙伴价值再获肯定

近日&#xff0c;以“拥抱AI共创美好”为主题的2024年联想全球供应商大会在深圳圆满举办&#xff0c;重磅分享联想战略愿景和目标。 TCL华星应邀设置品牌展区&#xff0c;携手机、IT等领域10余款前沿显示产品亮相会场&#xff0c;以先锋显示科技演绎联合共创的多元化场景。联想…

5-26作业

网络聊天室 服务器&#xff1a; 1 #include <myhead.h>2 int main(int argc, const char *argv[])3 {4 if(argc!3)5 {6 printf("请输入IP和端口号\n");7 return -1;8 }9 int sfd socket(AF_INET, SOCK_DGRAM, 0);10 if(…

MySQL数据库案例实战教程:数据类型、语法与高级查询详解

✨✨ 欢迎大家来访Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭❤&#xff5e;✨✨ &#x1f31f;&#x1f31f; 欢迎各位亲爱的读者&#xff0c;感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢&#xff0c;在这里我会分享我的知识和经验。&am…

xss-labs之level9、level10

一、level9 1、测试分析 尝试了之前的payload&#xff0c;发现都不行&#xff0c;看源码发现多了个strpos函数&#xff0c; strpos() 是一个在 PHP 中用于查找子串首次出现位置的函数。它接受两个参数&#xff1a;要搜索的字符串&#xff08;主字符串&#xff09;和要查找的子…

AAAI2024 基于扩散模型 多类别 工业异常检测 DiAD

前言 本文分享一个基于扩散模型的多类别异常检测框架&#xff0c;用于检测工业场景的缺陷检测或异常检测。 设计SG语义引导网络&#xff0c;在重建过程中有效保持输入图像的语义信息&#xff0c;解决了LDM在多类别异常检测中的语义信息丢失问题。高效重建&#xff0c;通过在潜…

开源大模型与闭源大模型:谁将引领AI的未来?

前言 在AI领域&#xff0c;开源大模型和闭源大模型一直并存&#xff0c;各自有其独特的优势和挑战。下面&#xff0c;我们将从数据隐私、商业应用和社区参与三个方向&#xff0c;对这两种模型进行深入探讨。 一、数据隐私 开源大模型&#xff1a; 1. 透明度高&#xff1a; …

SSDReporter for Mac:守护您硬盘健康的守护者

SSDReporter for Mac是一款专为Mac用户设计的固态硬盘&#xff08;SSD&#xff09;健康状况检测工具。以下是关于这款软件的详细介绍&#xff1a; SSDReporter for Mac的主要功能是全面检测、监控Mac设备中SSD的工作状态&#xff0c;以确保数据的完整性和设备的稳定性。它能够…

【problem】解决EasyExcel导出日期数据显示为#####问题

前言 在使用EasyExcel进行数据导出时&#xff0c;你可能遇到日期或其他数据在Excel中显示为“#######”的情况&#xff0c;这通常是因为列宽不足以展示单元格内的全部内容。本文将指导你如何通过简单的步骤解决这一问题&#xff0c;并确保导出的Excel文件自动调整列宽或直接指…

文件传输服务应用1——java集成smb2/3实现文件共享方案详细教程和windows共享服务使用配置

在实际项目开发过程中&#xff0c;读取网络资源或者局域网内主机的文件是必要的操作和需求。而FTP&#xff08;文件传输协议&#xff09;和SMB&#xff08;服务器消息块&#xff09;是两种最为常见的文件传输协议。它们各自在文件传输领域拥有独特的优势和特点&#xff0c;但同…

汇编原理()二进制 跳转指令

一.二进制 two complement reprentation&#xff08;补码&#xff09; 二进制的运算&#xff1a; 6的二进制 0110 -6的二进制 如何表示&#xff1f; 四个bit的第一个bit表示符号&#xff1a;1负0正 -6表示为1010 解释&#xff1a; 0 0000 1 0001 -1 1111&#xff08;由 …

【学习笔记】TypeScript

TypeScript 1、介绍 1.1、概述 1.2、基本特点 1.3、优势 1.4、开发环境搭建2、基础 2.1、类型声明 2.2、配置相关 2.2.1 自动编译文件 2.2.2 配置文件 tsconfig.json 2.2.3 使用 webpack 打包 ts 代码 …