Java 21 将在 2023 年 9 月 19 日发布

一、前言

Java 21 将在 2023 年 9 月 19 日发布,Java 21 是 Java 17 之后的下一个 LTS(长期维护) 版本。虚拟线程在 Java 21 中将成为正式功能。在 Spring Boot 3.2 中可以使用 spring.threads.virtual.enabled=true 一键开启她。Java 21 有望将会成为继 java8 之后又一个流行的 Java 版本。

二、java 21 功能更新

2.1 正式功能

  • 虚拟线程 (Virtual Threads)

  • 顺序集合(Sequenced Collections)

  • 记录类型的模式(Record Patterns)

  • switch 的模式匹配(Pattern Matching for switch)

  • 分代式 ZGC (Generational ZGC)

  • 废弃 Windows 32 位版本(Deprecate the Windows 32-bit x86 Port for Removal)

  • 准备禁止动态加载代理(Prepare to Disallow the Dynamic Loading of Agents)

  • 密钥封装机制API(Key Encapsulation Mechanism API)

2.2 预览功能

  • 未命名类和实例 main 方法(nnamed Classes and Instance Main Methods)

  • 字符串模板 (String Templates)

  • 未命名模式和变量 (Unnamed Patterns and Variables)

  • 外部方法和内存 API (Foreign Function & Memory API)

  • 结构化并发(Structured Concurrency )

  • 作用域值(Scoped Values)

2.3 孵化功能

  • 向量 API (Vector API)

三、java8 ~ 20 的各版本更新:

Java 8 (2014年3月发布) LTS长期维护,延长公共维护结束时间:2030年12月

  • Lambda 表达式、方法引用和函数接口,用于更简洁和灵活的编程。

  • 新的日期/时间 API,提供了更好的 API 设计和性能。

  • PermGen 空间被移除,取而代之的是 Metaspace 内存区域。

  • 并行数组支持。

  • Nashorn JavaScript 引擎。

Java 9 (2017年9月发布)

  • 模块系统,提供了更好的组件化和可靠性。

  • 改进的 Javadoc,包括搜索、注释等功能。

  • 改进的 HTTP/2 客户端。

  • 集合工厂方法,简化了集合的创建。

  • Reactive Streams API,用于响应式编程。

  • 私有接口方法,允许默认方法和静态方法直接访问。

  • JShell,交互式 Java REPL 工具。

Java 10 (2018年3月发布)

  • var 局部变量类型推断,允许声明变量时不必显式指定类型。

  • 改进的 G1 垃圾收集器,增强了吞吐量和 GC 时间预测。

  • 支持 Unicode 10。

  • 应用类数据共享(Application Class-Data Sharing)。

Java 11 (2018年9月发布) LTS长期维护,公共维护结束时间:2026年9月

  • HTTP 客户端标准化,替换了不稳定的 HttpURLConnection API。

  • 改进的 ZGC 垃圾收集器,支持大内存和低延迟应用场景。

  • Epsilon 垃圾收集器,用于短暂测试和性能调优。

  • 序列化过滤器,提供了更好的安全性。

  • 支持 Unicode 10.0.0。

Java 12 (2019年3月发布)

  • Shenandoah 垃圾收集器,用于大型堆内存。

  • 新的 Switch 表达式语法,可以更方便地编写条件语句。

  • 改进的 G1 垃圾收集器,增强了吞吐量和 GC 时间预测。

  • Microbenchmark Suite,用于精确测量代码性能。

Java 13 (2019年9月发布)

  • Text Block,一种新的 String 文本块语法。

  • ZGC 和 Shenandoah 垃圾收集器增强。

  • 改进的 Switch 表达式语法。

  • Dynamic CDS Archives,缩短了应用程序启动时间。

  • 支持 Unicode 12.0.0。

Java 14 (2020年3月发布)

  • Records,一种新的类声明语法,用于声明数据模型。

  • Pattern Matching for instanceof,增强了类型模式匹配。

  • NUMA-Aware Memory Allocation,提高了 JVM 的性能和伸缩性。

  • 支持 Unicode 12.1。

Java 15 (2020年9月发布)

  • Text Blocks 增强,包括更好的换行支持和缩进控制。

  • Sealed Classes,用于定义受限制的类继承层次关系。

  • Hidden Classes,用于隐藏类的实现细节。

  • 支持 Unicode 13.0.0。

Java 16 (2021年3月发布)

  • Records 增强,包括继承、泛型类型和属性的支持。

  • Pattern Matching for instanceof 和 Switch 表达式增强。

  • Vector API,用于支持高性能向量运算。

  • JEP 390,取消了警告消息。

Java 17 (2021年9月发布) LTS长期维护,公共维护结束时间:2029年9月

  • 原生嵌套(Native Support for Nested Based Access Control),用于在一个类中嵌套另一个类。

  • Sealed Class 和 Hidden Class 增强。

  • 支持嵌套开发环境 API。

  • FFI(Foreign Function Interface),用于通过本地语言调用本地代码。

  • 安全加密随机数生成器。

Java 18 (2022年3月发布)

  • 默认 UTF-8 字符编码

  • 简单的 Web 服务器 jwebserver

  • Javadoc 中支持代码片段

  • 使用方法句柄重新实现反射核心功能

  • 互联网地址解析 SPI

  • Vector API(三次孵化)

  • Foreign Function & Memory API (第二次孵化)

Java 19 (2022年9月发布)

  • 将 JDK 移植到 Linux/RISC-V 平台

  • 记录模式 (Record Patterns) 进入预览阶段

  • 外部函数和内存 API (Foreign Function & Memory API) 进入预览阶段

  • 虚拟线程 (Virtual Threads) 进入预览阶段

  • 向量 API (Vector API) 进入第 4 孵化阶段

  • switch 模式匹配 (Pattern Matching for switch) 进入第 3 预览阶段

  • 结构化并发 (Structured Concurrency) 进入孵化阶段

Java 20 (2023年3月发布)

  • 作用域值(Scoped Values)(第一次孵化)

  • 记录模式(Record Patterns)(第二次预览)

  • switch 模式匹配(Pattern Matching for switch)(第四次预览)

  • 外部函数和内存 API(Foreign Function & Memory API)(第二次预览)

  • 虚拟线程(Virtual Threads)(第二次预览)

  • 结构化并发(Structured Concurrency)(第二次孵化)

  • 向量 API(Vector API)(第五次孵化)

发布于 2023-09-07 09:05:43  

Spring Cloud 2022.0.4 正式版(RELEASE)于2023.08.28发布,可以在 Maven Central 中找到此版本。您可以查看 2022.0.4 版本说明以获取更多信息。

<dependencyManagement>
   <dependencies>
       <dependency>
           <groupId>org.springframework.cloud</groupId>
           <artifactId>spring-cloud-dependencies</artifactId>
           <version>2022.0.4</version>
           <type>pom</type>
           <scope>import</scope>
       </dependency>
   </dependencies>
</dependencyManagement>

<dependencies>
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-config</artifactId>
   </dependency>
   <dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
   </dependency>
  ...
</dependencies>

2022.0.4 Release Train 中的重要更改

此版本基于 Spring Boot 3.0.9 构建

Spring Cloud CLI

  • 停止维护

Spring Cloud Cloudfoundry

  • 停止维护

Spring Cloud Sleuth

停止维护。核心功能已转移到 Micrometer Tracing 项目,所有相关工具将移至 Micrometer 和各个项目中(不再在单个存储库中完成所有工具)。

Spring Cloud Commons

  • 添加了对 ServiceInstanceListSupplier 委托的重试感知负载均衡的支持(1221)

  • 在 Spring Framework 6 中删除了 AsyncRestTemplate,因此删除了 LoadBalancer 的自动配置。

  • 迁移到新的 Spring Security OAuth 2 用于令牌中继。

  • spring.config.use-legacy-processing=true 不再启用引导,因为 Spring Boot 3.0 中有变化。请使用 spring.cloud.bootstrap.enabled=true。

Spring Cloud OpenFeign

  • LoadBalancer ResponseData 现在使用 org.springframework.http.HttpStatusCode。

  • OAuth2 支持已迁移到 Spring Security OAuth2 客户端。

  • feign.autoconfiguration.jackson.enabled 现在默认设置为 true。

  • 与上游 Feign 项目的更改保持一致,decode404 属性和方法签名中的 decode404 段已更改为 dismiss404

  • 根据 Spring Framework 的更改,已删除对 Apache HttpClient 4 的支持。推荐使用 Apache HttpClient 5 作为替代方案,并且其支持已经可用了一段时间。

  • spring.cloud.openfeign.metrics 属性前缀已更改为spring.cloud.openfeign.micrometer。

  • Spring Cloud OpenFeign 的属性前缀从 feign 更改为 spring.cloud.openfeign

Spring Cloud Netflix

  • 删除了不必要的@EnableEurekaClient 注解

  • 删除了废弃的 RestTemplateDiscoveryClientOptionalArgs#RestTemplateDiscoveryClientOptionalArgs()构造函数。

  • 切换到默认的@FeignClient 属性解析。如果想要返回到延迟属性解析(例如,用于带有 Spring Cloud Contract 集成的测试),请将 spring.cloud.openfeign.lazy-attributes-resolution 设置为 true。

作为 2022.0.4 的一部分,以下模块已更新:

模块 版本
Spring Cloud Zookeeper4.0.1
Spring Cloud Kubernetes3.0.4
Spring Cloud Function4.0.5
Spring Cloud Commons4.0.4
Spring Cloud CircuitBreaker3.0.3
Spring Cloud OpenFeign4.0.4
Spring Cloud Gateway4.0.7
Spring Cloud Stream4.0.4
Spring Cloud Consul4.0.3
Spring Cloud Build4.0.5
Spring Cloud Config4.0.4
Spring Cloud Contract4.0.4
Spring Cloud Starter Build2022.0.4
Spring Cloud Netflix4.0.3
发布于 2023-08-30 14:53:09  

Spring Boot 2.7.15 已经发布,并且现在可以从 Maven Central 获得。


2.7.15 版本包括了 45 个 bug 修复、文档改进和依赖升级

这是一个 Bug 修复的列表,包括以下内容:

🐞 Bug修复

  • 当缺少CachingConnectionFactory并且已启用的属性为false时,未配置Artemis ConnectionFactory #36767
  • server.max-http-request-header-size未影响启用http2的Netty服务器 #36766
  • LogbackLoggingSystem未报告被抑制的异常细节 #36645
  • RabbitMQ smoke测试缺少一个测试 #36610
  • 在通过server.ssl.enabled-protocols启用多个协议时,Tomcat在缺少+/-前缀时发出警告 #36572
  • 启动和就绪时间指标的描述包含时间单位,但当导出指标时,单位可能会更改 #36507
  • management.metrics.export.wavefront属性不完整 #36498
  • management.metrics.export.signalfx属性不完整 #36497
  • management.metrics.export.atlas属性不完整 #36496
  • 当配置了指向目录的资源时,基于脚本的数据库初始化失败并显示不友好的错误消息 #36386
  • 即使没有运行任何作业,JobLauncherApplicationRunner也返回成功的退出代码 #36060
  • DatabaseDriver吞掉了真正的异常 #34728
  • 在测试期间在初始化期间抛出异常时,应用程序上下文会初始化两次 #24888

🔨 依赖升级

  • 升级到Elasticsearch 7.17.12 #36870
  • 升级到Groovy 3.0.19 #37055
  • 升级到MariaDB 3.1.4 #36394
  • 升级到Micrometer 1.9.14 #36824
  • 升级到Netty 4.1.97.Final #37085
  • 升级到Reactor Bom 2020.0.35 #36825
  • 升级到Spring AMQP 2.4.15 #36826
  • 升级到Spring Batch 4.3.9 #36827
  • 升级到Spring Data Bom 2021.2.15 #36828
  • 升级到Tomcat 9.0.79 #36992
  • 升级到Undertow 2.2.26.Final #37029
发布于 2023-08-25 10:47:53  

Spring Boot 3.1.3 已经发布,并且现在可以从 Maven Central 获得。


3.1.3 版本包括了 82 个 bug 修复、文档改进和依赖升级

这是一个Bug修复的列表,包括以下内容:

🐞 Bug修复

  • 修复了无法检测带有查询参数的日志配置URL为XML的问题 (#37062)

  • 将环境变量名APP_PASSWORD更改为APP_USER_PASSWORD (#37044)

  • 修复了BindableRuntimeHintsRegistrar不会为ConfigurationProperties类型的所有嵌套类型生成提示的问题 (#37022)

  • 修复了server.max-http-request-header-size不影响启用http2的Netty服务器的问题 (#37015)

  • 修复了如果source或target为空,则AbstractAotMojo不应添加它们的问题 (#36972)

  • 修复了ProcessTestAotMojo中的异常消息拼写有误的问题 (#36966)

  • 修复了Docker Compose的启动失败,显示"unknown flag: --no-color"的问题 (#36908)

  • 修复了在使用指向目录的资源进行基于脚本的数据库初始化时会出现一个无用的错误消息的问题 (#36786)

  • 修复了当缺少CachingConnectionFactory且启用属性为false时,未配置Artemis ConnectionFactory的问题 (#36772)

  • 修复了DatabaseDriver吞掉了真正的异常的问题 (#36759)

  • 修复了定义自定义ElasticsearchTransport会导致自动配置的JsonpMapper退后的问题 (#36700)

  • 修复了自动配置的会话存储库定制可能会覆盖SessionRepositoryCustomizer bean的定制的问题 (#36696)

  • 修复了RabbitMQ的smoke测试缺失一个测试的问题 (#36612)

  • 修复了当通过server.ssl.enabled-protocols启用多个协议时,Tomcat会警告缺少+/-前缀的问题 (#36584)

  • 修复了management.metrics.export.stackdriver属性不完整的问题 (#36559)

  • 修复了management.wavefront.metrics.export属性不完整的问题 (#36556)

  • 修复了management.metrics.export.signalfx属性不完整的问题 (#36553)

  • 修复了JobLauncherApplicationRunner在没有运行作业的情况下返回成功的退出代码的问题 (#36532)

  • 删除对jakarta.annotation.PostConstruct的使用 (#36529)

  • 修复了management.metrics.export.atlas属性不完整的问题 (#36526)

  • 修复了started和ready时间指标的描述包含时间单位,但当导出指标时,单位可能会发生变化的问题 (#36516)

  • 与其他Spring Boot目标不同,process-aot和process-test-aot在Maven反应堆项目上运行的问题 (#36494)

  • 在切片测试中,@Bean方法上的@ServiceConnection无效的问题 (#36037)

🔨 升级依赖

  • 升级到AspectJ 1.9.20 (#37003)

  • 升级到Byte Buddy 1.14.6 (#36994)

  • 升级到Caffeine 3.1.8 (#36926)

  • 升级到Couchbase Client 3.4.8 (#36979)

  • 升级到Dependency Management Plugin 1.1.3 (#36927)

  • 升级到Groovy 4.0.14 (#37057)

  • 升级到Hibernate 6.2.7.Final (#36928)

  • 升级到Infinispan 14.0.14.Final (#36995)

  • 升级到Jersey 3.1.3 (#36930)

  • 升级到jOOQ 3.18.6 (#36931)

  • 升级到Lettuce 6.2.6.RELEASE (#37004)

  • 升级到Logback 1.4.11 (#36932)

  • 升级到Micrometer 1.11.3 (#36839)

  • 升级到Micrometer Tracing 1.1.4 (#36840)

  • 升级到Native Build Tools Plugin 0.9.24 (#36933)

  • 升级到Neo4j Java Driver 5.11.0 (#36980)

  • 升级到Netty 4.1.97.Final (#37088)

  • 升级到Pooled JMS 3.1.1 (#36935)

  • 升级到R2DBC Pool 1.0.1.RELEASE (#36936)

  • 升级到R2DBC Proxy 1.1.2.RELEASE (#36672)

  • 升级到Reactor Bom 2022.0.10 (#36841)

  • 升级到RxJava3 3.1.7 (#37089)

  • 升级到Spring AMQP 3.0.8 (#36842)

  • 升级到Spring Authorization Server 1.1.2 (#36843)

  • 升级到Spring Batch 5.0.3 (#36844)

  • 升级到Spring Data Bom 2023.0.3 (#36845)

  • 升级到Spring Kafka 3.0.10 (#36846)

  • 升级到Spring LDAP 3.1.1 (#36847)

  • 升级到Spring Security 6.1.3 (#36848)

  • 升级到Spring Session 3.1.2 (#36849)

  • 升级到Thymeleaf 3.1.2.RELEASE (#36937)

  • 升级到Thymeleaf Extras SpringSecurity 3.1.2.RELEASE (#36938)

  • 升级到Tomcat 10.1.12 (#36978)

  • 升级到Undertow 2.3.8.Final (#37031)

发布于 2023-08-25 10:45:13