精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

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

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

大家好,今天這篇文章是一篇技術實戰文章。

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

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

根據項目大小和機器環境,花費幾秒到幾十秒的應該都有。

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

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

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

它是誰?

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

它有多強?

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

小芝士,GraalVM官網對原生鏡像的解釋:

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

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

上 手

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

環境信息

  • 電腦:MacBook Pro 13寸 2017

  • 操作系統: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 構建,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 插件將項目構建為 Docker 鏡像,然后啟動鏡像;

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

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

性能測試對比

場景一:使用 Spring Native

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

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

場景二:普通啟動

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

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

小結

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

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

解決方法:增大 Docker 的內存配置

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

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


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

    關注

    1

    文章

    1618

    瀏覽量

    49052
  • spring
    +關注

    關注

    0

    文章

    338

    瀏覽量

    14311
  • 鏡像
    +關注

    關注

    0

    文章

    164

    瀏覽量

    10698

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

文章出處:【微信號:CodeSheep,微信公眾號:CodeSheep】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    java spring教程

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

    什么是java spring

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

    EDAS再升級!全面支持Spring Cloud應用

    ,框架的硬件資源占用卻更少,在CPU和Load占用方面少于Spring Cloud約60%。EDAS不僅在阿里內部應用廣泛,在各個領域的領航企業中,也成了企業IT架構轉型過程中的重要工具。 通過EDAS
    發表于 02-02 15:20

    Spring工作原理

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

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

    Spring Boot嵌入式Web容器原理Spring Boot的目標是構建“非常容易創建、獨立、產品級別的基于Spring的應用”。這些應用是“立即可運行的”。在這個過程中,完全沒有
    發表于 12-16 07:57

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

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

    Spring認證_什么是Spring GraphQL

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

    Spring認證」什么是Spring GraphQL?

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

    spring認證證書有用嗎?

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

    為什么使用spring-authorization-server?

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

    基于spring的SPI擴展機制是如何實現的?

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

    怎樣使用Kiuwan保護Spring Boot應用程序呢?

    Spring Boot 提供了快速輕松地構建基于Spring 的應用程序所需的工具、功能和依賴項。
    的頭像 發表于 03-16 09:10 ?760次閱讀

    Spring干掉原生JVM?

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

    Spring Boot Actuator快速入門

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

    Spring Cloud Gateway網關框架

    Spring Cloud Gateway網關框架 本軟件微服務架構中采用Spring Cloud Gateway網關控制框架,Spring Cloud Gateway是Spring C
    的頭像 發表于 08-22 09:58 ?431次閱讀
    <b class='flag-5'>Spring</b> Cloud Gateway網關框架