中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何將本地SpringBoot項目jar包部署到Linux環境中

發布時間:2023-04-17 15:27:28 來源:億速云 閱讀:163 作者:iii 欄目:開發技術

這篇“如何將本地SpringBoot項目jar包部署到Linux環境中”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“如何將本地SpringBoot項目jar包部署到Linux環境中”文章吧。

    目標

    一鍵將本地已經打包好的SpringBoot項目部署到linux環境,實現秒級部署
    前置知識:需掌握Maven的打包

    迭代步驟

    • 在windows環境使用命令啟動SpringBoot項目

    • 在Linux環境使用命令啟動項目

    • 在Linux環境使用腳本啟動項目

    • 優化腳本,每次重啟時先關閉項目

    • 分離依賴,每次上傳Linux環境只上傳幾百k的代碼包

    • 搭配IDEA插件,實現在IDEA中一鍵部署

    一、前提:

    有一個Windows環境可以啟動的SpringBoot項目jar包

    1、使用Maven的package命令打出一個攜帶依賴的jar包

    例如:

    如何將本地SpringBoot項目jar包部署到Linux環境中

    2、Window啟動jar包

    java -jar SpringBootTest-0.0.1-SNAPSHOT.jar

    如何將本地SpringBoot項目jar包部署到Linux環境中

    啟動完畢,說明jar包是可以正常啟動的。

    二、linux環境啟動jar包

    1、先將jar包扔到linux環境

    如何將本地SpringBoot項目jar包部署到Linux環境中

    2、測試是否可以啟動(需要有Java環境)

    java -jar SpringBootTest-0.0.1-SNAPSHOT.jar

    如何將本地SpringBoot項目jar包部署到Linux環境中

    說明在Linux環境也是可以正常啟動的

    但是以上的啟動方式有個問題,窗口一關項目就自動關閉了

    3、優化啟動腳本,改為后臺啟動,并將日志輸出到springboot.log

    nohup java -jar SpringBootTest-0.0.1-SNAPSHOT.jar > springboot.log &

    如何將本地SpringBoot項目jar包部署到Linux環境中

    啟動成功,進程號為9777

    以上的腳本也存在問題,第二次啟動的時候,會因為已經啟動了一個服務,端口占用啟動不了

    如何將本地SpringBoot項目jar包部署到Linux環境中

    4、完善腳本,啟動時,如果存在已經啟動的服務,先關閉,再啟動

    創建腳本

    vim start.sh

    腳本內容

    # 關閉程序
    # fileName為jar包的名稱
    fileName=SpringBootTest-0.0.1-SNAPSHOT.jar
    pid=$(ps -ef | grep $fileName| grep -v "grep" | awk '{print $2}')
    kill -9 $pid
    
    # 啟動項目
    nohup java -jar $fileName > springboot.log &

    之后,啟動項目就可以

    sh start.sh

    至此,SpringBoot項目在Linux的啟動就說明完畢。

    但是,以上的部署方式還存在一些問題,在只有web依賴的時候,jar的大小就已經達到17M,

    如何將本地SpringBoot項目jar包部署到Linux環境中

    而在實際開發中,jar包的大小甚至會到達一百多兆。例如這樣:

    如何將本地SpringBoot項目jar包部署到Linux環境中

    為什么明明沒有多少代碼,包的大小卻這么大呢?

    解壓SpringBootTest-0.0.1-SNAPSHOT.jar包查看內容

    如何將本地SpringBoot項目jar包部署到Linux環境中

    可以看出,lib文件夾占用了16.7M,而lib文件夾里面是什么東西呢?

    如何將本地SpringBoot項目jar包部署到Linux環境中

    可以看到,就是各種的依賴。

    所以,就引發了新的優化方向,能不能將依賴包直接放在服務器上,每次只更新自己的代碼?

    答案是:可以!在實際開發中,依賴包一般來說是不會動的,于是開始第三步。

    三、分離依賴部署

    1.上傳依賴jar包Linux服務器

    (1)創建lib文件夾

    mkdir lib

    如何將本地SpringBoot項目jar包部署到Linux環境中

    (2)將jar包中的/BOOT-INF/lib目錄底下的jar包全部上傳到Linux服務器的lib文件夾

    如何將本地SpringBoot項目jar包部署到Linux環境中

    2.改造項目的pom.xml文件

    增加配置:

        <build>
            <plugins>
                <!-- 解決jar中沒有主清單屬性問題 -->
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <mainClass>com.example.springboottest.SpringBootTestApplication</mainClass>
                        <!-- jar包不攜帶依賴配置開始-->
                        <layout>ZIP</layout>
                        <includes>
                            <include>
                                <groupId>nothing</groupId>
                                <artifactId>nothing</artifactId>
                            </include>
                        </includes>
                        <!-- jar包不攜帶依賴部署配置結束-->
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>

    如何將本地SpringBoot項目jar包部署到Linux環境中

    3.重新package

    如何將本地SpringBoot項目jar包部署到Linux環境中

    新生成的jar包僅僅只有156kb!

    4.上傳到服務器

    如何將本地SpringBoot項目jar包部署到Linux環境中

    這時候,如果使用原本的腳本啟動就會報錯:

    如何將本地SpringBoot項目jar包部署到Linux環境中

    5.使用-Dloader.path指定外部依賴包

    (1)增加啟動文件start2.sh

    cp start.sh start2.sh

    (2)在java -jar后追加-Dloader.path=./lib

    # 關閉程序
    fileName=SpringBootTest-0.0.1-SNAPSHOT.jar
    pid=$(ps -ef | grep $fileName| grep -v "grep" | awk '{print $2}')
    kill -9 $pid
    
    # 啟動項目
    nohup java -jar -Dloader.path=./lib  $fileName > springboot.log &

    使用外部依賴啟動成功

    如何將本地SpringBoot項目jar包部署到Linux環境中

    到此,使用外部依賴啟動就完成了,只要加上-Dloader.path=./lib就可以了

    6.合并start.sh和start2.sh腳本

    第五步還存在的一個問題,雖然這個方法很好用,但是又增加了一個腳本。公司內部,總是有人想要打全量包,使用自帶的依賴,有的人想要打不攜帶依賴的包,可以快速部署啟動,這時候,就需要區分,到底是要用start.sh腳本還是start2.sh腳本,于是,將start.shstart2.sh腳本進行合并,大于10M的時候,就使用內部依賴,小于10M的時候就使用外部依賴

    合并后的start.sh腳本:

    # 關閉程序
    fileName=SpringBootTest-0.0.1-SNAPSHOT.jar
    pid=$(ps -ef | grep $fileName| grep -v "grep" | awk '{print $2}')
    kill -9 $pid
    
    # 獲取jar包的大小
    filesize=`ls -l $fileName | awk '{ print $5 }'`
    # 多少M以上使用外部依賴
    maxsize=$((1024 * 1024 * 10)) # 10M
    
    if [ $filesize -gt $maxsize ]
    then
      echo "文件大小為【$filesize】,使用內部依賴啟動"
      nohup java -jar -Dloader.path=./lib  $fileName > springboot.log &
    else
      echo "文件大小為【$filesize】,使用外部依賴啟動"
      nohup java -jar $fileName > springboot.log &
    fi

    適配兩種情況

    小于10M的jar包使用外部依賴

    如何將本地SpringBoot項目jar包部署到Linux環境中

    大于10M的jar包使用內部依賴

    如何將本地SpringBoot項目jar包部署到Linux環境中

    在第三步優化完之后,jar包的大小大大減少,只剩下1M都不到,每次上傳耗時不到1s,還能不能繼續優化呢?

    答案也是可以!當前還存在的問題是:

    1、需要手動選擇文件上傳。

    2、需要手動執行腳本

    于是,進行第四步優化,引入Alibaba Cloud Toolkit插件

    四、搭配Alibaba Cloud Toolkit插件使用,實現一鍵上傳文件,并執行腳本

    1、IDEA安裝Alibaba Cloud Toolkit插件

    1.1 從插件市場中下載Alibaba Cloud Toolkit插件,并重啟IDEA。

    如何將本地SpringBoot項目jar包部署到Linux環境中

    2.配置服務器地址

    如何將本地SpringBoot項目jar包部署到Linux環境中

    如何將本地SpringBoot項目jar包部署到Linux環境中

    如何將本地SpringBoot項目jar包部署到Linux環境中

    可以看到就增加了一條新的配置

    如何將本地SpringBoot項目jar包部署到Linux環境中

    3.配置上傳地址和執行的命令

    查看所在路徑

    如何將本地SpringBoot項目jar包部署到Linux環境中

    點擊上傳,配置上傳的文件、上傳地址以及執行的腳本

    如何將本地SpringBoot項目jar包部署到Linux環境中

    填加執行命令

    如何將本地SpringBoot項目jar包部署到Linux環境中

    如何將本地SpringBoot項目jar包部署到Linux環境中

    4.點擊Upload按鈕

    成果:1秒部署SpringBoot項目

    如何將本地SpringBoot項目jar包部署到Linux環境中

    以上就是關于“如何將本地SpringBoot項目jar包部署到Linux環境中”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    张家口市| 融水| 西乌珠穆沁旗| 榕江县| 天全县| 东兰县| 肇州县| 都匀市| 龙州县| 苍梧县| 平湖市| 云龙县| 普宁市| 齐河县| 紫阳县| 富民县| 搜索| 临高县| 嘉鱼县| 通州区| 平利县| 泰州市| 郴州市| 普格县| 安塞县| 曲麻莱县| 浑源县| 霍山县| 绩溪县| 永清县| 手游| 威信县| 西平县| 晋江市| 牡丹江市| 郎溪县| 定兴县| 彰化市| 桃源县| 新蔡县| 红原县|