溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spring Boot 2.4的新特性是什么

發布時間:2020-12-24 14:03:28 來源:億速云 閱讀:385 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關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

<!-- 新增的部分,注意需要增加 spring maven 倉庫地址才能下載到-->
<dependency>
 <groupId>org.springframework.experimental</groupId>
 <artifactId>spring-graalvm-native</artifactId>
 <version>0.8.3</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
 <artifactId>spring-context-indexer</artifactId>
</dependency>

<!--需要添加 spring maven 倉庫下載 spring-graalvm-native-->
<repositories>
 <repository>
  <id>spring-milestones</id>
  <name>Spring Milestones</name>
  <url>https://repo.spring.io/milestone</url>
 </repository>
</repositories>

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的新特性是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女