SpringBoot 2.0 開發案例之百倍級減肥瘦身之旅
阿新 • • 發佈:2019-11-04
前言
為了存我的小黃圖,最近在做一款圖床服務,集成了各種第三方雲端儲存服務,目前正在內部測試階段。專案是以Jar的形式執行在騰訊雲上,不要問我為什麼使用騰訊雲了,因為阿里雲老使用者和狗不得入內。
問題凸顯
因為內測期間程式碼邏輯會經常變動,這就免不了重新打包上傳,雖然家庭是百兆頻寬,奈何雲伺服器上行頻寬有限制啊,總有那麼幾分鐘不開心。
瘦身之旅
瘦身前,專案差不多得54MB
的樣子,以後可能越來越肥胖!!!那怎麼辦? 程式設計師作為一個懶人職業,總會想到一些辦法來搞定問題。
首先我們正常打包,解壓 Jar
包,把 BOOT-INF
目錄下的 lib
目錄拷貝出來,這個後面會用到。
然後排除專案第三方依賴包,pom.xml 引入:
<plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.itstyle.picture.Application</mainClass> <layout>ZIP</layout> <!--排除專案第三方依賴包--> <includes> <include> <groupId>nothing</groupId> <artifactId>nothing</artifactId> </include> </includes> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin>
打包完成之後,target
目錄下生成了一個僅有7.5MB
的檔案,不要問我為什麼還這麼大,因為靜態資源佔了大部分,其實業務程式碼僅有幾百KB而已。
你以為這樣就完了嗎,顯然沒有。對於解壓後十幾兆的靜態檔案我們完全可以排除掉,pom.xml
繼續引入:
<!-- 排除靜態資源 爪哇筆記:https://blog.52itstyle.vip --> <resources> <resource> <filtering>true</filtering> <directory>src/main/resources</directory> <excludes> <exclude>static/**</exclude> </excludes> </resource> </resources>
這時候 target
目錄下生成的是一個僅僅有356KB
的小東西!!!以後,無論什麼雲都是秒傳了。
雖然專案秒傳了,但是要想讓它正常訪問,我們還需要做一步,把靜態檔案單獨上傳,放置到Nginx
服務下,實現專案的動靜分離。
server {
listen 80;
server_name www.cloudbed.vip;
location / {
proxy_pass http://127.0.0.1:8080;
}
#靜態檔案交給nginx處理
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ioc|rar|
zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$
{
root /cloudbed/static;
expires 30d;
}
location ~ .*\.(js|css)?$
{
root /cloudbed/static;
expires 1h;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
執行
把 lib
目錄和瘦身的 Jar
包,上傳到專案目錄下,執行下面命令:
java -Dloader.path=/cloudbed/lib -jar /cloudbed/cloudbed.jar
小結
從54MB
到7.5MB
再到356KB
是不是爽翻了!!!編譯速度也從十幾秒下降到兩三秒,基本上來說是秒編。以後,如果需要變更業務邏輯,編譯、打包、上傳秒秒中搞定。對於程式設計師來說,時間真的很寶貴,幾秒中搞定的事情,絕對不能讓它過分。