溫馨提示×

溫馨提示×

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

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

如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

發(fā)布時間:2023-04-17 15:27:28 來源:億速云 閱讀:162 作者:iii 欄目:開發(fā)技術(shù)

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

    目標(biāo)

    一鍵將本地已經(jīng)打包好的SpringBoot項目部署到linux環(huán)境,實現(xiàn)秒級部署
    前置知識:需掌握Maven的打包

    迭代步驟

    • 在windows環(huán)境使用命令啟動SpringBoot項目

    • 在Linux環(huán)境使用命令啟動項目

    • 在Linux環(huán)境使用腳本啟動項目

    • 優(yōu)化腳本,每次重啟時先關(guān)閉項目

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

    • 搭配IDEA插件,實現(xiàn)在IDEA中一鍵部署

    一、前提:

    有一個Windows環(huán)境可以啟動的SpringBoot項目jar包

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

    例如:

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    2、Window啟動jar包

    java -jar SpringBootTest-0.0.1-SNAPSHOT.jar

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    二、linux環(huán)境啟動jar包

    1、先將jar包扔到linux環(huán)境

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    java -jar SpringBootTest-0.0.1-SNAPSHOT.jar

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    說明在Linux環(huán)境也是可以正常啟動的

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

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

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    啟動成功,進程號為9777

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    4、完善腳本,啟動時,如果存在已經(jīng)啟動的服務(wù),先關(guān)閉,再啟動

    創(chuàng)建腳本

    vim start.sh

    腳本內(nèi)容

    # 關(guān)閉程序
    # 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的大小就已經(jīng)達到17M,

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    而在實際開發(fā)中,jar包的大小甚至?xí)竭_一百多兆。例如這樣:

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    解壓SpringBootTest-0.0.1-SNAPSHOT.jar包查看內(nèi)容

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

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

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

    三、分離依賴部署

    1.上傳依賴jar包Linux服務(wù)器

    (1)創(chuàng)建lib文件夾

    mkdir lib

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    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包不攜帶依賴部署配置結(jié)束-->
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    3.重新package

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    4.上傳到服務(wù)器

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

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

    cp start.sh start2.sh

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

    # 關(guān)閉程序
    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環(huán)境中

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

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

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

    合并后的start.sh腳本:

    # 關(guān)閉程序
    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】,使用內(nèi)部依賴啟動"
      nohup java -jar -Dloader.path=./lib  $fileName > springboot.log &
    else
      echo "文件大小為【$filesize】,使用外部依賴啟動"
      nohup java -jar $fileName > springboot.log &
    fi

    適配兩種情況

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    大于10M的jar包使用內(nèi)部依賴

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    答案也是可以!當(dāng)前還存在的問題是:

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

    2、需要手動執(zhí)行腳本

    于是,進行第四步優(yōu)化,引入Alibaba Cloud Toolkit插件

    四、搭配Alibaba Cloud Toolkit插件使用,實現(xiàn)一鍵上傳文件,并執(zhí)行腳本

    1、IDEA安裝Alibaba Cloud Toolkit插件

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    2.配置服務(wù)器地址

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    3.配置上傳地址和執(zhí)行的命令

    查看所在路徑

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    填加執(zhí)行命令

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

    4.點擊Upload按鈕

    成果:1秒部署SpringBoot項目

    如何將本地SpringBoot項目jar包部署到Linux環(huán)境中

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

    向AI問一下細節(jié)

    免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI