<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          0.07 秒啟動一個 SpringBoot 項目!Spring Native 很強??!

          共 2854字,需瀏覽 6分鐘

           ·

          2022-10-28 09:15

          近期文章精選 :

          Java面試指南網站:javaguide.cn

          先拋一個問題,大家在自己電腦上啟動一個 Spring Boot 項目需要花費多久?

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

          Spring 官方推出了一項技術可以將項目的啟動時間縮短到 79 毫秒,79 毫秒大概是個什么概念?就是你還沒反應過來項目已經啟動好了,太牛了。

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

          我是誰?

          Spring Native 是 Spring 推出微服務體系 Spring Cloud 之后的又一大舉動,從名字可以猜出,Spring Native 是一門面向云原生的技術。如果你還對這個概念不太理解,可以多看一點東西,比如 Oracle 的 GraalVM 等。

          Spring Native 為使用 GraalVM 原生鏡像編譯器編譯 Spring 應用為本地可執(zhí)行文件提供支持。與 Java 虛擬機相比,原生鏡像可以在許多場景下降低工作負載,包括微服務,函數(shù)式服務,非常適合容器和 Kubernetes。使用原生鏡像有明顯優(yōu)勢,如快速啟動,提高峰值性能以及降低內存消耗。

          我有多強?

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

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

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

          • 輸出是一個本機可執(zhí)行文件,其中包含您的應用程序以及 JDK 的子集以及運行它所需的依賴項。
          • 在實踐中,可執(zhí)行文件可能會以高度優(yōu)化的容器映像(FROM scratch支持 Docker 鏡像)的形式提供,并且減少了表面攻擊,非常適合 Kubernetes。
          • 啟動時間幾乎是即時的,并且可以立即獲得峰值性能,從而支持從零縮放(無服務器)應用程序,包括常規(guī)的 Spring Boot Web 應用程序。
          • 減少了內存消耗,這非常適合拆分為多個微服務的系統(tǒng)。

          這些原生的 Spring 應用可以作為一個獨立的可執(zhí)行文件(原生鏡像)進行部署(不需要安裝 JVM),性能非常強:

          • 幾乎瞬時的啟動(一般會小于 100 毫秒)
          • 瞬時的峰值性能以及更低的資源消耗

          當然牛逼的背后肯定要稍微付出一點代價:比 JVM 更長的構建時間和更少的運行時優(yōu)化。

          上手

          既然 Spring Native 性能這么強悍,是不是得動手試一試了。

          下面我會拿傳統(tǒng)的 springboot 項目和基于 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 構建,spring boot 版本選擇 2.5.8,jdk 版本選擇 11

          第二步:添加必要依賴

          添加兩個依賴:

          • spring native
          • spring web

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

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

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

          運行項目

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

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

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

          我電腦上已經裝了 docker 工具,這里我演示一下第一種方式。

          第一步:生成 docker 鏡像文件

          $ ./mvnw spring-boot:build-image

          這個過程可能有點漫長,也可能會失敗,大家做好心理準備。

          第二步:啟動鏡像文件

          $ docker run --rm spring-native-demo:0.0.1-SNAPSHOT

          執(zhí)行完命令之后,項目瞬間就跑起來了。

          性能測試對比

          場景一:使用 Spring Native

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

          場景二:普通啟動

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

          結論

          在我的破電腦上測試,Spring Native 的啟動速度大致是普通啟動的 15 倍。

          Spring Native 牛逼!牛逼!牛逼?。ㄆ埔簦?/p>

          FAQ

          在測試過程中踩了不少坑,這里做一個匯總。

          問題一:maven 依賴下載失敗,網絡差

          可以配置 maven 鏡像倉庫

          <mirror>
            <id>aliyunmaven</id>
            <mirrorOf>*</mirrorOf>
            <name>central</name>
            <url>https://maven.aliyun.com/repository/central</url>
          </mirror>

          問題二:鏡像構建失敗,提示內存不足

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

          ··········  END  ··············

          ?? 歡迎準備 Java 面試以及學習 Java 的同學加入我的知識星球,干貨很多!收費雖然是白菜價,但星球里的內容或許比你參加上萬的培訓班質量還要高。

          ?? 《Java 面試指北》持續(xù)更新完善中!這是一份教你如何更高效地準備面試的小冊,涵蓋常見八股文(系統(tǒng)設計、常見框架、分布式、高并發(fā) ......)、優(yōu)質面經等內容。

          推薦閱讀 :

          ?? 如果本文對你有幫助的話,歡迎 點贊&在看&分享 ,這對我繼續(xù)分享&創(chuàng)作優(yōu)質文章非常重要。非常感謝!

          瀏覽 56
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲黄色视频网址 | 大鸡吧操我视频 | 日韩超碰在线 | 91爱爱视频 | 日本色情免费视频 |