0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Spring官方再出手,這個工具殺瘋了!

CodeSheep ? 來源:CodeSheep ? 2023-08-01 16:25 ? 次閱讀

大家好,今天這篇文章是一篇技術(shù)實戰(zhàn)文章。

在文章開始之前,這里先拋一個問題:

大家在自己電腦上啟動一個 Spring Boot 項目大概需要花費多久?

根據(jù)項目大小和機器環(huán)境,花費幾秒到幾十秒的應(yīng)該都有。

而之前 Spring 官方推出了一項技術(shù)說是可以將項目的啟動時間縮短到 79 毫秒。

79 毫秒大概是個什么概念?就是你還沒反應(yīng)過來項目已經(jīng)啟動好了。

這項技術(shù)被 Spring 官方命名為Spring Native,翻譯成中文叫Spring 云原生,應(yīng)該有少部分人聽說過這個概念,我先帶大家入門掃盲。

它是誰?

Spring Native 是 Spring 推出微服務(wù)體系 Spring Cloud 之后的又一大舉動,從名字可以猜出,Spring Native是一門面向云原生的技術(shù)。如果你還對這個概念不太理解,可以多看一點東西,比如 Oracle 的 GraalVM等。Spring Native 為使用 GraalVM 原生鏡像編譯器編譯 Spring 應(yīng)用為本地可執(zhí)行文件提供支持。與 Java 虛擬機相比,原生鏡像可以在許多場景下降低工作負載,包括微服務(wù),函數(shù)式服務(wù),非常適合容器和 Kubernetes。使用原生鏡像有明顯優(yōu)勢,如快速啟動,提高峰值性能以及降低內(nèi)存消耗。

它有多強?

上面提到了原生鏡像,簡單來說原生鏡像是一種將Java代碼提前編譯為獨立可執(zhí)行文件(稱為本機映像)的技術(shù)??蓤?zhí)行文件包括應(yīng)用程序類,以及其依賴項的類,運行時庫類以及JDK中的靜態(tài)鏈接本機代碼。

小芝士,GraalVM官網(wǎng)對原生鏡像的解釋:

原生鏡像提供了一種構(gòu)建和運行具有不同于常規(guī)JVM部署特性的Spring Boot應(yīng)用程序的方法:

  • 輸出是一個本機可執(zhí)行文件,其中包含您的應(yīng)用程序以及JDK的子集以及運行它所需的依賴項。
  • 在實踐中,可執(zhí)行文件可能會以高度優(yōu)化的容器映像(FROM scratch支持Docker鏡像)的形式提供,并且減少了表面攻擊,非常適合Kubernetes。
  • 啟動時間幾乎是即時的,并且可以立即獲得峰值性能,從而支持從零縮放(無服務(wù)器)應(yīng)用程序,包括常規(guī)的Spring Boot Web應(yīng)用程序。
  • 減少了內(nèi)存消耗,這非常適合拆分為多個微服務(wù)的系統(tǒng)。
這些原生的 Spring 應(yīng)用可以作為一個獨立的可執(zhí)行文件(原生鏡像)進行部署(不需要安裝 JVM),性能非常強:
  • 幾乎瞬時的啟動(一般會小于 100 毫秒)
  • 瞬時的峰值性能以及更低的資源消耗
當然牛逼的背后肯定要稍微付出一點代價:比 JVM 更長的構(gòu)建時間和更少的運行時優(yōu)化。

上 手

既然 Spring Native 性能這么強悍,是不是得動手試一試了。 下面我會拿傳統(tǒng)的 Spring Boot 項目和基于 Spring Native的項目進行比較演示,讓大家來直觀地感受一下。

環(huán)境信息

  • 電腦:MacBook Pro 13寸 2017

  • 操作系統(tǒng):macOS Big Sur 11.2

  • IDE:IntelliJ IDEA 2021.2.2 (Ultimate Edition)

  • Open JDK:11.0.12

  • Maven:3.6.3

  • Docker Desktop:4.0.1

初始化項目

進入 Spring 初始化頁面: https://start.spring.io/第一步:填寫必要項目信息

這里我選擇 Maven 構(gòu)建,SpringBoot 版本這里選擇的是2.5.8,jdk 版本選擇 11

257632ce-3007-11ee-9e74-dac502259ad0.png

第二步:添加必要依賴 添加兩個依賴:
  • SpringNative
  • Spring Web

25ab1cb4-3007-11ee-9e74-dac502259ad0.png

25de3e14-3007-11ee-9e74-dac502259ad0.png

第三步:生成項目骨架代碼

點擊下載可以獲得一個壓縮包

25e89aa8-3007-11ee-9e74-dac502259ad0.png

注意:以上步驟也可以直接在 IDEA 里通過 start.spring.io進行新建,這里不再贅述。

運行項目

導入測試項目后可以在根目錄下面看到一個幫助文檔:

25fa40a0-3007-11ee-9e74-dac502259ad0.png

通過閱讀幫助文檔得知有兩種方式啟動 Spring Native 項目:

  • 第一種:借助 Maven 插件將項目構(gòu)建為 Docker 鏡像,然后啟動鏡像;

  • 第二種:借助本地構(gòu)建工具將項目打包為一個可執(zhí)行的文件,然后直接啟動即可。

我電腦上已經(jīng)裝了 Docker 工具,這里我演示一下第一種方式。第一步:生成Docker 鏡像文件
$./mvnwspring-boot:build-image
這個過程可能有點漫長,也可能會失敗,大家做好心理準備。第二步:啟動鏡像文件
$dockerrun--rmspring-native-demo:0.0.1-SNAPSHOT
執(zhí)行完命令之后,項目瞬間就跑起來了。

性能測試對比

場景一:使用 Spring Native

官方宣稱 79 毫秒就可以啟動,原諒我的電腦太渣了,最好的一次花費了 143 毫秒,也就是一瞬間的事情,確實牛叉。

2613e8f2-3007-11ee-9e74-dac502259ad0.png

場景二:普通啟動

沒有對比就沒有傷害,普通啟動花費了2.091 秒

263c2eac-3007-11ee-9e74-dac502259ad0.png

小結(jié)

在我的破電腦上測試,Spring Native 的啟動速度大致是普通啟動的 15 倍。FAQ 在測試過程中踩了不少坑,這里做一個匯總。問題一:Maven 依賴下載失敗,網(wǎng)絡(luò) 可以配置 Maven 鏡像倉庫
<mirror>
<id>aliyunmavenid>
<mirrorOf>*mirrorOf>
<name>centralname>
<url>https://maven.aliyun.com/repository/centralurl>
mirror>
問題二:鏡像構(gòu)建失敗,提示內(nèi)存不足

266a58f4-3007-11ee-9e74-dac502259ad0.jpg

解決方法:增大 Docker 的內(nèi)存配置

2673e13a-3007-11ee-9e74-dac502259ad0.png

好了,以上就是今天的內(nèi)容分享了,感謝大家的收看,我們下篇見。


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1634

    瀏覽量

    49133
  • spring
    +關(guān)注

    關(guān)注

    0

    文章

    340

    瀏覽量

    14344
  • 鏡像
    +關(guān)注

    關(guān)注

    0

    文章

    164

    瀏覽量

    10729

原文標題:Spring官方再出手,這個工具殺瘋了!

文章出處:【微信號:CodeSheep,微信公眾號:CodeSheep】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    java spring教程

    java spring教程理解Spring 實現(xiàn)原理掌握Spring IOC,AOP掌握Spring的基礎(chǔ)配置和用法熟練使用SSH開發(fā)項目Sprin
    發(fā)表于 09-11 11:09

    什么是java spring

    什么是java springSpring是一個開源框架,它由Rod Johnson創(chuàng)建。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來完成以前只可能由EJB完成
    發(fā)表于 09-11 11:16

    EDAS再升級!全面支持Spring Cloud應(yīng)用

    ,框架的硬件資源占用卻更少,在CPU和Load占用方面少于Spring Cloud約60%。EDAS不僅在阿里內(nèi)部應(yīng)用廣泛,在各個領(lǐng)域的領(lǐng)航企業(yè)中,也成了企業(yè)IT架構(gòu)轉(zhuǎn)型過程中的重要工具。 通過EDAS
    發(fā)表于 02-02 15:20

    Spring工作原理

    核心就是AOP這個就是面向切面編程,可以為某一類對象 進行監(jiān)督和控制(也就是在調(diào)用這類對象的具體方法的前后去調(diào)用你指定的 模塊)從而達到對一個模塊擴充的功能。這些都是通過配置類達到的。Spring目的
    發(fā)表于 07-10 07:41

    Spring Boot嵌入式Web容器原理是什么

    Spring Boot嵌入式Web容器原理Spring Boot的目標是構(gòu)建“非常容易創(chuàng)建、獨立、產(chǎn)品級別的基于Spring的應(yīng)用”。這些應(yīng)用是“立即可運行的”。在這個過程中,完全沒有
    發(fā)表于 12-16 07:57

    比特幣“瘋了,48小時53億資金灰飛煙滅,7萬人爆倉!

    比特幣“瘋了,48小時53億資金灰飛煙滅,7萬人爆倉!礦機也瘋狂,店員:2萬臺也能賣出去,網(wǎng)友:洗錢神器......,比特幣,礦機,交易
    發(fā)表于 02-20 14:12 ?1427次閱讀

    Spring認證_什么是Spring GraphQL

    Spring GraphQL 為構(gòu)建在 GraphQL Java 上的 Spring 應(yīng)用程序提供支持。兩個團隊之間的聯(lián)合聯(lián)合。我們的共同理念是少固執(zhí)己見,更專注于全面和廣泛的支持。 Spring
    的頭像 發(fā)表于 08-06 14:30 ?717次閱讀
    <b class='flag-5'>Spring</b>認證_什么是<b class='flag-5'>Spring</b> GraphQL

    Spring認證」什么是Spring GraphQL?

    這個項目建立在 Boot 2.x 上,但它應(yīng)該與最新的 Boot2.4.x5 相關(guān)。 要創(chuàng)建項目,請轉(zhuǎn)到start.spring.io并為要使用的GraphQL傳輸選擇啟動器: 啟動機 運輸 執(zhí)行
    的頭像 發(fā)表于 08-10 14:08 ?825次閱讀
    「<b class='flag-5'>Spring</b>認證」什么是<b class='flag-5'>Spring</b> GraphQL?

    spring認證證書有用嗎?

    Spring認證(全稱:Spring Professional認證)是Spring官方推出的認證體系,旨在測試和驗證學生對 Spring
    的頭像 發(fā)表于 07-12 15:59 ?2223次閱讀

    為什么使用spring-authorization-server?

    官方原因:原先使用Spring Security OAuth,而該項目已經(jīng)逐漸被淘汰,雖然網(wǎng)上還是有不少該方案,但秉著技術(shù)要隨時代更新,從而使用spring-authorization-server
    的頭像 發(fā)表于 01-09 15:27 ?2203次閱讀

    基于spring的SPI擴展機制是如何實現(xiàn)的?

    基本上,你一說是基于 spring 的 SPI 擴展機制,再把spring.factories文件和EnableAutoConfiguration提一下,那么這個問題就答的八九不離十了。
    的頭像 發(fā)表于 03-07 09:17 ?1054次閱讀

    怎樣使用Kiuwan保護Spring Boot應(yīng)用程序呢?

    Spring Boot 提供了快速輕松地構(gòu)建基于Spring 的應(yīng)用程序所需的工具、功能和依賴項。
    的頭像 發(fā)表于 03-16 09:10 ?793次閱讀

    Spring干掉原生JVM?

    這意味著,除了 Spring 誕生以來就支持的 Java 虛擬機,官方添加了使用 GraalVM 將 Spring 應(yīng)用編譯成原生鏡像的 beta 支持,這樣的話,就能提供一種新的方式來部署
    的頭像 發(fā)表于 05-05 09:25 ?562次閱讀
    <b class='flag-5'>Spring</b>干掉原生JVM?

    Spring Boot Actuator快速入門

    一下 Spring Boot Actuator ,學習如何在 Spring Boot 2.x 中使用、配置和擴展這個監(jiān)控工具Spring
    的頭像 發(fā)表于 10-09 17:11 ?639次閱讀

    Spring Cloud Gateway網(wǎng)關(guān)框架

    Spring Cloud Gateway網(wǎng)關(guān)框架 本軟件微服務(wù)架構(gòu)中采用Spring Cloud Gateway網(wǎng)關(guān)控制框架,Spring Cloud Gateway是Spring C
    的頭像 發(fā)表于 08-22 09:58 ?494次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網(wǎng)關(guān)框架