日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
從零搭建開發(fā)腳手架SpringBoot應(yīng)用瘦身打包便于部署

[[411049]]
本文轉(zhuǎn)載自微信公眾號(hào)「Java大廠面試官」,作者laker。轉(zhuǎn)載本文請(qǐng)聯(lián)系Java大廠面試官公眾號(hào)。

成都創(chuàng)新互聯(lián)一直在為企業(yè)提供服務(wù),多年的磨煉,使我們?cè)趧?chuàng)意設(shè)計(jì),全網(wǎng)整合營(yíng)銷推廣到技術(shù)研發(fā)擁有了開發(fā)經(jīng)驗(yàn)。我們擅長(zhǎng)傾聽企業(yè)需求,挖掘用戶對(duì)產(chǎn)品需求服務(wù)價(jià)值,為企業(yè)制作有用的創(chuàng)意設(shè)計(jì)體驗(yàn)。核心團(tuán)隊(duì)擁有超過10余年以上行業(yè)經(jīng)驗(yàn),涵蓋創(chuàng)意,策化,開發(fā)等專業(yè)領(lǐng)域,公司涉及領(lǐng)域有基礎(chǔ)互聯(lián)網(wǎng)服務(wù)達(dá)州主機(jī)托管、app軟件開發(fā)、手機(jī)移動(dòng)建站、網(wǎng)頁設(shè)計(jì)、網(wǎng)絡(luò)整合營(yíng)銷。

  • 背景
  • 使用
  • 工作原理
  • 額外補(bǔ)充
    • 運(yùn)行應(yīng)用程序進(jìn)行預(yù)熱
    • 使用Maven在編譯期打包依賴項(xiàng)
    • 生產(chǎn)環(huán)境

背景

Spring Boot 默認(rèn)打的Jar,包含應(yīng)用程序代碼及其所有依賴項(xiàng)(內(nèi)置tomcat jar就不小了),所以打包出來的jar文件很大,動(dòng)不動(dòng)就幾十,上百M(fèi),稱之為Fat jar。

在網(wǎng)速不給力的情況下,上傳服務(wù)器非常耗時(shí)。然而,其中我們引用到的Tomcat、Spring以及其他第三方組件,它們大部分時(shí)間是不會(huì)修改的而且占用了很大的空間,每次打包打進(jìn)去。其實(shí),我們經(jīng)常改動(dòng)的內(nèi)容都是我們自己編寫的代碼,其大小大概也就幾十KB,每次升級(jí)我們只需替換這些文件即可。

Spring社區(qū)大概也考慮到了開發(fā)者有這樣的需求,所以提供了spring-boot-thin-launcher這個(gè)插件用來將項(xiàng)目的依賴和配置從jar包中分離出去。

使用

官網(wǎng)地址:https://github.com/spring-projects-experimental/spring-boot-thin-launcher

在Spring Boot pom文件中新增插件如下:

 
 
 
 
  1.     
  2.         
  3.             
  4.                 org.springframework.boot
  5.                 spring-boot-maven-plugin
  6.                 
  7.                     
  8.                         org.springframework.boot.experimental
  9.                         spring-boot-thin-layout
  10.                         1.0.27.RELEASE
  11.                     
  12.                 
  13.             
  14.         
  15.     

然后還像以前一樣執(zhí)行mvn clean package,這時(shí)生成的jar包僅幾十KB。

我這里因?yàn)轫?xiàng)目有很多靜態(tài)文件所以比較大有2MB。

執(zhí)行java -jar xxx.jar即可直接運(yùn)行程序。

除了jar文件減小了,其他效果看著與Fat jar是一樣。

嘗鮮之后,來看下其內(nèi)部原理吧。

工作原理

我們來看下Jar包內(nèi)部的構(gòu)成。

 
 
 
 
  1. Manifest-Version: 1.0
  2. Implementation-Title: map
  3. Implementation-Version: 0.0.1-SNAPSHOT
  4. Start-Class: com.laker.map.LakerMapApplication
  5. Spring-Boot-Classes: 
  6. Build-Jdk-Spec: 1.8
  7. Spring-Boot-Version: 2.3.7.RELEASE
  8. Created-By: Maven Jar Plugin 3.2.0
  9. Main-Class: org.springframework.boot.loader.wrapper.ThinJarWrapper

即啟動(dòng)類實(shí)際為:ThinJarWrapper

ThinJarWrapper類

我們編寫的代碼

項(xiàng)目的Pom文件

當(dāng)執(zhí)行java -jar xxx.jar時(shí),實(shí)際執(zhí)行的是ThinJarWrapper,它會(huì)先在指定目錄搜索看看依賴的jar包是否都存在,存在則直接使用,如果不存在,先從Maven中央倉(cāng)庫(kù)下載到本地,然后,再執(zhí)行我們自己編寫的main()入口方法。這種方式有點(diǎn)類似很多在線安裝程序:用戶下載后得到的是一個(gè)很小的exe安裝程序,執(zhí)行安裝程序時(shí),會(huì)首先在線下載所需的若干巨大的文件,再進(jìn)行真正的安裝。

這個(gè)spring-boot-thin-launcher在啟動(dòng)時(shí)搜索的默認(rèn)目錄是用戶主目錄的.m2,我們也可以指定下載目錄,例如,將下載目錄指定為當(dāng)前目錄:

 
 
 
 
  1. java -Dthin.root=. -jar xxx.jar

執(zhí)行后發(fā)現(xiàn)當(dāng)前目錄下自動(dòng)生成了一個(gè)repository目錄,這和Maven的默認(rèn)下載目錄~/.m2/repository的結(jié)構(gòu)是完全一樣的,只是它僅包含xxx.jar所需的運(yùn)行期依賴項(xiàng)。

 
 
 
 
  1. repository/
  2.     com/
  3.     net/
  4.     org/
  5.     ...

“注意:只有首次運(yùn)行時(shí)會(huì)自動(dòng)下載依賴項(xiàng),再次運(yùn)行時(shí)由于無需下載,所以啟動(dòng)速度會(huì)大大加快。如果刪除了repository目錄,再次運(yùn)行時(shí)就會(huì)再次觸發(fā)下載。

額外補(bǔ)充

運(yùn)行應(yīng)用程序進(jìn)行預(yù)熱

緩存依賴項(xiàng)的最簡(jiǎn)單方法是在目標(biāo)環(huán)境中對(duì)應(yīng)用程序進(jìn)行預(yù)熱運(yùn)行。正如我們之前看到的,這將導(dǎo)致依賴項(xiàng)被下載并緩存在本地 Maven 存儲(chǔ)庫(kù)中。如果我們運(yùn)行多個(gè)應(yīng)用程序,存儲(chǔ)庫(kù)最終將包含所有依賴項(xiàng)而沒有重復(fù)項(xiàng)。

由于運(yùn)行應(yīng)用程序可能會(huì)產(chǎn)生不必要的副作用,我們還可以執(zhí)行“試運(yùn)行”,只解析和下載依賴項(xiàng),而無需運(yùn)行任何用戶代碼:

 
 
 
 
  1. java -Dthin.dryrun=true -Dthin.root=. -jar xxx.jar

使用Maven在編譯期打包依賴項(xiàng)

添加以下依賴

 
 
 
 
  1.     org.springframework.boot.experimental
  2.     spring-boot-thin-maven-plugin
  3.     ${thin.version}
  4.     
  5.         
  6.         
  7.         resolve
  8.         
  9.             resolve
  10.         
  11.         false
  12.         
  13.     

構(gòu)建項(xiàng)目后,目錄為target/thin/root/。

生產(chǎn)環(huán)境

生產(chǎn)環(huán)境中,大部分都是內(nèi)外網(wǎng)隔離的,建議先在本地“試運(yùn)行”,然后把repository目錄,瘦jar一起復(fù)制到服務(wù)器,設(shè)置thin.root指定目錄,設(shè)置thin.offline切換到“離線”模式。所有依賴項(xiàng)都必須在本地可用.

 
 
 
 
  1. java -Dthin.root=. -Dthin.offline=true  -jar xxx.jar

參考:

https://www.liaoxuefeng.com/wiki/1252599548343744/1304267002478625


當(dāng)前文章:從零搭建開發(fā)腳手架SpringBoot應(yīng)用瘦身打包便于部署
當(dāng)前鏈接:http://www.dlmjj.cn/article/djohesh.html