继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17

大家好,我是君哥。

新版任你发,我用 Java 8,这可能是当下 Java 开发者的真实写照。不过时代可能真的要抛弃 Java 8,全面拥抱 Java 17 了。

Spring Boot 3.0

前些天,相信小伙伴们都注意到了,SpringBoot 发布了 3.0.0-M1 版本,并官宣全面拥抱 Java 17,下面的截图是 Release Notes 中的一段:

微信图片_20221213110140.png

其他的新特性大家可以去 Github 查看。

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0.0-M1-Release-Notes/16c166b5fb4232998a8cfd3966c2851ec1eddf02

Spring Boot 3.0.0-M1 版本发布,也意味着 Spring Boot 进入 3.x 版本的迭代,同时也看到,3.x 版本开始 Spring Boot 要全面拥抱 Java 17 了。

Elastic 8

凑巧的是,2022 年 2 月 11 日,Elastic 也发布了新版本 Elastic 8,这个版本跟上个版本间隔了 3 年。下面的截图是 Issue 79873:

微信图片_20221213110204.png

可以看到,运行新的 Elasticsearch 版本需要 Java 17 了。

Java 17

从 Java 8 以后,每个版本发布都增加了哪些新特性呢?我们一起来看一下。

Java 9

  • 私有接口方法
  • 默认垃圾收集器改为 G1
  • HTTP client,支持 WebSocket、HTTP/2、HTTPS/TLS、非阻塞 API。

Java 10

  • 局部变量类型推断,可以使用 var 类型来定义变量。
  • 不可变集合
  • G1 支持并行 Full GC
  • 基于 Java 的 JIT 编译器 Graal
  • 支持在不执行全局安全点的情况下执行线程回调,这样可以在不停止所有线程的情况下停止单个线程。

Java 11

  • 标准 HTTP Client 升级
  • 引入 ZGC 垃圾收集器
  • Flight Recorder,可以收集基于 OS、JVM和JDK 事件产生的数据。
  • 对Stream、Optional、集合 API进行增强。

Java 12

  • 引入 Switch 表达式
  • Shenandoah GC 垃圾收集算法
  • JMH 基准测试
  • G1 支持可中断的 mixed GC,将 Mixed GC 拆分为强制部分和可选部分,强制部分一定会被回收,可选部分可以不被回收,这样垃圾收集过程中优先处理强制集,更容易满足暂停时间目标。
  • G1 可以归还不使用的内存给操作系统

Java 13

  • switch 优化更新,增加 yield 关键字用于返回结果。
  • ZGC 支持将未使用的内存归还操作系统
  • 引入了文本块,可以使用 """ 三个引号表示文本块,示例代码如下:
String html = """
  <html>
   <body>
    <p>Hello, world</p>
   </body>
  </html>
""";

Java 14

  • instanceof 语法简化,可以直接给对象赋值:
if (obj instanceof String s) { 
    //这里可以使用 s 变量
} else {
    //这里不能使用 s 变量
}
  • 引入 Record,类似于枚举类型,具有 Lombok 功能,可以自动生成构造器、equals、getter 等方法。
  • 放弃 CMS

Java 15

  • 引入 hidden class
  • String.substring 优化,如果长度为 0,返回 null
  • 引入 Sealed class

Java 16

  • Stream新增toList方法
  • 提供jpackage
  • java.time 根据时段获取时间

Java 17

  • 升级 switch 使用,switch可直接用 instanceof 模式匹配选择,不过需要提前做 null 判断(下面代码选自 oschina):
Object o;
switch (o) {
    case null      -> System.out.println("首先判断对象是否为空,走空指针逻辑等后续逻辑");
    case String s  -> System.out.println("判断是否为字符串,s:" + s);
    case record p  -> System.out.println("判断是否为Record类型: " + p.toString());
    case int[] arr -> System.out.println("判断是否为数组,展示int数组的长度" + ia.length);
    case Integer i -> System.out.println("判断是否为Intger对象,i:" + i);
    case Student s   -> System.out.println("判断是否为具体学生对象,student:" + s.toString());
    case UserCommonService -> System.out.println("判断是否为普通用户实现类,然后走普通用户逻辑");
    case UserVipService    -> System.out.println("判断是否为vip用户实现类,然后走vip用户逻辑");
    default   -> System.out.println("Something else");
}
  • 默认启用 Parallel GC
  • 增强TreeMap
  • 统一日志异步刷新,先将日志写入缓存,独立线程负责刷新到相应输出。

上面的版本只有 Java 11 和 Java 17 是 LTS(Long Term Support) 版本

总结

全面拥抱 Java 17 还没有真的到来,但已经在路上了,作为程序员的我们应该做准备了。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
1月前
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
92 33
|
24天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 6
|
28天前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
38 5
|
28天前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
52 2
|
1月前
|
Java 开发者 Spring
java springboot监听事件和处理事件
通过上述步骤,开发者可以在Spring Boot项目中轻松实现事件的发布和监听。事件机制不仅解耦了业务逻辑,还提高了系统的可维护性和扩展性。掌握这一技术,可以显著提升开发效率和代码质量。
75 13
|
28天前
|
监控 Java API
【潜意识Java】使用SpringBoot构建高效的RESTfulAPI
本文介绍了使用Spring Boot构建RESTful API的完整流程,涵盖从项目创建到API测试的各个步骤。
46 1
|
1月前
|
Java Spring
Java Spring Boot监听事件和处理事件
通过上述步骤,我们可以在Java Spring Boot应用中实现事件的发布和监听。事件驱动模型可以帮助我们实现组件间的松耦合,提升系统的可维护性和可扩展性。无论是处理业务逻辑还是系统事件,Spring Boot的事件机制都提供了强大的支持和灵活性。希望本文能为您的开发工作提供实用的指导和帮助。
100 15
|
9月前
|
Java
【极问系列】springBoot集成elasticsearch出现Unable to parse response body for Response
【极问系列】springBoot集成elasticsearch出现Unable to parse response body for Response
1021 2
|
NoSQL Java 测试技术
SpringBoot集成ElasticSearch在启动时报availableProcessors is already set to [8], rejecting [8]
SpringBoot集成ElasticSearch在启动时报availableProcessors is already set to [8], rejecting [8]
157 0
|
SQL 自然语言处理 Java
springboot 2.0集成elasticsearch 7.6.2 (集群)关键字高亮显示(上)
springboot 2.0集成elasticsearch 7.6.2 (集群)关键字高亮显示
222 0
springboot 2.0集成elasticsearch 7.6.2 (集群)关键字高亮显示(上)