gradle打包springboot項目並部署到Tomcat9


最近有個畢設項目,想部署到與服務器上,但是屢屢不能訪問,多次嘗試后最終部署成功,現記錄下部署經歷,供各位參考。

環境

  • springboot 2.3.3.RELEASE
  • gradle-5.6.1
  • tomcat 9
  • mysql

所遇問題

部署后無法訪問

在部署中看tomcat的啟動頁面(我先開始是在Windows上部署的)如果沒有出現spring的界面,那么部署就算沒有報錯,tomcat的wabapp下也能看到war解析出來的項目文件夾,但這是訪問不了項目的。
image
究其原因,是因為springboot打成war包需要讓工程屏蔽內置tomcat並且繼承SpringBootServletInitializer重寫SpringApplicationBuilder方法。下面來實現這兩點。

1、gradle屏蔽內置tomcat

在build.gradle中配置如下代碼

compile("org.springframework.boot:spring-boot-starter-websocket") {
        exclude module: "spring-boot-starter-tomcat"
    }
因為此處的我gradle版本不高,如果高版本可能需要改一下。

2、繼承SpringBootServletInitializer

此處需要在啟動類下面做修改,讓啟動類繼承SpringBootServletInitializer並且實現其中的SpringApplicationBuilder接口

public class 啟動類名 extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(啟動類名Application.class);
    }
}

訪問地址錯誤

修改完以后部署到tomcat,這時不能像平時那樣直接輸入http://localhost:8080/ 訪問,這樣還是會無法訪問,應該在8080后面加上項目名稱,就是你的war包名字比如我的是travel.war 那么我的訪問地址就是http://localhost:8080/travel/login
這樣顯然不行,因為這樣項目里面的其他路徑不可能都去修改,所以我們需要做一個地址映射,讓它像在平時在springboot里面啟動那樣不用輸入項目名稱直接訪問。

修改server.xml

image
如圖所示修改host標簽下的屬性,context要自己加上去,其中path路徑為空,沒有空格。
然后重啟tomcat,這樣就不用每次都要輸入項目名稱了。

部署到linux上無法顯示圖片

在Windows的tomcat上可以部署以后,我上傳到了linux部署,這里需要注意,一定要修改里面的那些地址,全部修改成linux目錄。
在linux上面能訪問項目,但是我發現上傳圖片的時候能上傳上去(linux目錄下有上傳的圖片)但是無法在網頁中展示。
這里我首先看了上傳圖片的權限,果然

-rw-r----- 1 root root       6739

於是我給圖片授權644,為了不用每張上傳來的圖片都去授權,所以我們可以作如下配置
image
將UMASK改為0022,重啟tomcat即可。

但是依然無法讀取,顯然不僅僅是權限的問題,后面我上網搜索了一下發現,是我當時只配置了項目的映射路徑,沒有給圖片配置映射路徑,所以在server.xml中加入圖片映射即可。
image
注意:在linux上也要注意改下項目的路徑。
最后完美解決!
image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM