SpringBoot2.4的新特性是什么-创新互联

这篇文章将为大家详细讲解有关Spring Boot 2.4的新特性是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

成都创新互联公司专注于思茅企业网站建设,响应式网站开发,商城网站开发。思茅网站建设公司,为思茅等地区提供建站服务。全流程按需定制设计,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务

节省 95%的内存占用,减少 80%的启动耗时。

GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务。最近比较火的 Java 框架 Quarkus 默认支持 GraalVM

下图为 Quarkus 和传统框架(SpringBoot) 等对比图,更快的启动速度、更小的内存消耗、更短的服务响应。

Spring Boot 2.4 开始逐步提供对 GraalVM 的支持,旨在提升上文所述的 启动、内存、响应的使用体验。

安装 GraalVM

目前官方社区版本新为 20.3.0 ,是基于 OpenJDK 8u272 and 11.0.9 定制的,可以理解为 OpenJDK 的衍生版本

官方推荐的是 SDKMAN 用于快速安装和切换不同版本 JDK 的工具 ,类似于 nodejs 的 nvm。


使用类似命令即可完成指定版本安装和指定默认版本

sdk install java 11.0.9.hs-adpt
sdk default java 11.0.9.hs-adpt

不过安装过程中需要从国外下载相关资源 ,笔者在尝试后使用体验并不是很好,所有建议大家下载指定版本 GraalVM 安装即可(和 JDK 安装方式一样)。

安装成功查看版本

⋊> ~ java -version              11:30:34
openjdk version "11.0.9" 2020-10-20
OpenJDK Runtime Environment GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06)
OpenJDK 64-Bit Server VM GraalVM CE 20.3.0 (build 11.0.9+10-jvmci-20.3-b06, mixed mode, sharing)

安装 native-image

native-image 是由 Oracle Labs 开发的一种 AOT 编译器,应用所需的 class 依赖项及 runtime 库打包编译生成一个单独可执行文件。具有高效的 startup 及较小的运行时内存开销的优势。

但 GraalVM 并未内置只是提供 gu 安装工具,需要我们单独安装。

- 切换到 jdk 的安装目录
⋊> ~ cd $JAVA_HOME/bin/

- 使用gu命令安装
⋊> ./gu install native-image

初始化 Spring Boot 2.4 项目

Spring Initializr 创建 demo 项目

curl https://start.spring.io/starter.zip -d dependencies=web \
   -d bootVersion=2.4.1 -o graal-demo.zip

先看一下启动基准数据 , 单纯运行空项目 需要 1135 ms 秒

java -jar demo-0.0.1-SNAPSHOT.jar
engine: [Apache Tomcat/9.0.41]
2020-12-18 11:48:36.856 INFO 91457 --- [   main] o.a.c.c.C.[Tomcat].[localhost].[/]  : Initializing Spring embedded WebApplicationContext
2020-12-18 11:48:36.856 INFO 91457 --- [   main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1135 ms

内存占用情况

ps aux | grep demo-0.0.1-SNAPSHOT.jar | grep -v grep | awk '{print $11 "\t" $6/1024"MB" }'
/usr/bin/java	480.965MB

支持 GraalVM

增加相关依赖,涉及插件较多完整已上传 Gitee Gist



 org.springframework.experimental
 spring-graalvm-native
 0.8.3


 org.springframework
 spring-context-indexer




 
  spring-milestones
  Spring Milestones
  https://repo.spring.io/milestone
 

Main 方法修改,增加属性 proxyBeanMethods = false

@SpringBootApplication(proxyBeanMethods = false)

使用 native-image 构建可执行文件

mvn -Pnative package
#构建过程比较慢,日志如下
spring.factories files...
[com.example.demo.demoapplication:93430] classlist: 4,633.58 ms, 1.18 GB
 _____      _        _ __   __  _
 / ___/ ____ _____ (_) ____ ____ _   / | / / ____ _ / /_ (_) _ __ ___
 \__ \ / __ \ / ___/ / / / __ \ / __ `/   / |/ / / __ `/ / __/ / / | | / / / _ \
 ___/ / / /_/ / / /  / / / / / / / /_/ /   / /| / / /_/ / / /_ / / | |/ / / __/
/____/ / .___/ /_/  /_/ /_/ /_/ \__, /   /_/ |_/ \__,_/ \__/ /_/ |___/ \___/
  /_/       /____/

...
[com.example.demo.demoapplication:93430]  [total]: 202,974.38 ms, 4.23 GB

编译结果

在 targe 目录生成 名称为com.example.demo.demoapplication 可执行文件

启动应用 这里执行的编译后的可执行文件而不是 jar

cd target

./com.example.demo.demoapplication

启动时间 0.215 seconds

2020-12-18 12:30:40.625 INFO 94578 --- [   main] com.example.demo.DemoApplication   : Started DemoApplication in 0.215 seconds (JVM running for 0.267)

看一下内存占用 24.8203MB

ps aux | grep com.example.demo.demoapplication | grep -v grep | awk '{print $11 "\t" $6/1024"MB" }'

./com.example.demo.demoapplication	24.8203MB

数据对比


是否引入 GraalVM内存占用启动时间
480.965MB1135 ms
24.8203MB215 ms

关于Spring Boot 2.4的新特性是什么就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


新闻标题:SpringBoot2.4的新特性是什么-创新互联
转载注明:http://hbruida.cn/article/dhseis.html