支持虚拟线程
Spring Boot 3.2 提供了对虚拟线程的支持。要使用虚拟线程,您需要在 Java 21 上运行并将属性设置spring.threads.virtual.enabled为true。
1. Servlet Web 服务器
当启用虚拟线程时,Tomcat和Jetty将使用虚拟线程来处理请求。这意味着处理 Web 请求的应用程序代码将在虚拟线程上运行。
2. 任务执行
当启用虚拟线程时,下面的线程池将使用虚拟线程的方式。
- applicationTaskExecutor bean 将是一个配置为使用虚拟线程的 SimpleAsyncTaskExecutor
- 任何使用应用程序任务执行器的地方,例如@EnableAsync调用@Async方法时
- Spring MVC 的异步请求处理和 Spring WebFlux 的阻塞执行支持现在都将利用虚拟线程。
ASimpleAsyncTaskExecutorBuilder现在在应用程序上下文中可用,并且可用于构建SimpleAsyncTaskExecutor. SimpleAsyncTaskExecutorCustomizerbeans 可用于自定义构建SimpleAsyncTaskExecutor。如果启用了虚拟线程,构建器会自动配置为使用它们。
3. 任务调度
当启用虚拟线程时:
- taskSchedulerbean 将被SimpleAsyncTaskScheduler配置为使用虚拟线程。
- SimpleAsyncTaskSchedulerBuilder现在在应用程序上下文中可用,并且可用于构建SimpleAsyncTaskScheduler.
4. 保持 JVM 的活动状态
有一个名为 的新属性spring.main.keep-alive。当设置为 时true,JVM 会保持活动状态,即使所有其他线程都是虚拟(或守护程序)线程。
5. 特定技术集成
启用虚拟线程后,将应用以下特定于技术的集成:
- 虚拟线程执行器是为 RabbitMQ 侦听器自动配置的。
- 为 Kafka 侦听器自动配置虚拟线程执行器。
- Spring Data RedisClusterCommandExecutor将使用虚拟线程。
- Spring for Apache Pulsar 将使用 aVirtualThreadTaskExector用于自动配置ConcurrentPulsarListenerContainerFactory和DefaultPulsarReaderContainerFactory.
支持Jetty 12
Spring Boot 现在支持 Jetty 12。Jetty 12 支持 Servlet 6.0 API,使其与 Tomcat 和 Undertow 保持一致。以前,如果您将 Jetty 与 Spring Boot 3.x 一起使用,则 Servlet API 必须降级到 5.0。这不再是必要的了。升级时删除 Servlet API 版本的任何覆盖。
Java版本支持
不再支持 Java 8,最低版本要求的JDK 17。
官方文档:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.2-Release-Notes