Spring Boot 打包與部署
1. 前言
項目開發(fā)完畢后,免不了將前后端應(yīng)用打包,然后部署到生產(chǎn)服務(wù)器上運行。本篇就演示一個標(biāo)準(zhǔn)的打包、部署過程。
2. 操作流程
我們以上一篇開發(fā)的前后端分離項目 spring-boot-cors
為例進行打包、部署演示,步驟如下:
2.1 服務(wù)器運行環(huán)境安裝
一般服務(wù)器采用 Linux 或者 Windows Server 系統(tǒng),相對而言 Linux 系統(tǒng)更加穩(wěn)定安全。實際上 Windows Server 系統(tǒng)對于一般應(yīng)用來說也足夠了,本篇我們使用 Windows Server 系統(tǒng)進行演示。
推薦使用云服務(wù)器,更加穩(wěn)定且易于維護,國內(nèi)廠商阿里云、華為云都還不錯。
Tips: 云服務(wù)器的硬盤讀寫性能非常重要,在購買云服務(wù)器時務(wù)必關(guān)注下云硬盤的 IOPS 值(衡量硬盤讀寫性能的一個指標(biāo)),一般建議要采用 IOPS > 3800 的云磁盤。
具備云服務(wù)器后,需要安裝 JDK 以便運行 Spring Boot 應(yīng)用。由于 nginx 對靜態(tài)資源的負(fù)載能力非常強悍,所以我們將前端應(yīng)用部署到 nginx 上。
2.2 Spring Boot 打包為 jar 并運行
Spring Boot 應(yīng)用可以打包為 war 或者 jar ,官方和我個人都是推薦打 jar 包??梢灾苯舆\行,無需部署到 Web 服務(wù)器上。
打開命令行工具,進入 spring-boot-cors
項目目錄后運行 mvn clean package -Dmaven.test.skip=true
命令,即可快速打包 Spring Boot 應(yīng)用。下圖中的 jar 文件,即為打包后的 Spring Boot 應(yīng)用。
接下來我們將該應(yīng)用拷貝至服務(wù)器,在同一目錄下新建 start.bat 文件,內(nèi)容如下:
java -jar spring-boot-cors-0.0.1-SNAPSHOT.jar
雙擊 start.bat 文件即可啟動項目,效果如下,可以看出系統(tǒng)已經(jīng)啟動成功(started)。
2.3 Spring Boot 打包為 war 并運行
也可以選擇將 Spring Boot 打包為 war ,然后放置于 Tomcat 的 webapps 目錄下加載運行,接下來我們就詳細(xì)描述下打包為 war 的過程。
首先,在 pom.xml 文件中修改默認(rèn)的打包方式,顯式指定打包方式為 war 。
<groupId>com.imooc</groupId>
<artifactId>spring-boot-cors</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spring-boot-cors</name>
<description>Demo project for Spring Boot</description>
<packaging>war</packaging>
然后,由于 Spring Boot 內(nèi)置了 Tomcat ,所以我們在打包時需要排除內(nèi)置的 Tomcat ,這樣可以避免內(nèi)置 Tomcat 和 war 包部署運行的 Tomcat 產(chǎn)生沖突。在 pom.xml 中添加如下依賴即可:
<!--打war包時排除內(nèi)置的tomcat-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
再然后,還需要繼承 SpringBootServletInitializer 類并重寫 configure 方法,這是為了告訴 Tomcat 當(dāng)前應(yīng)用的入口在哪。
@SpringBootApplication
public class SpringBootCorsApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(SpringBootCorsApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(SpringBootCorsApplication.class, args);
}
}
最后,即可同樣使用 mvn clean package -Dmaven.test.skip=true
命令打包應(yīng)用了,運行命令后會在 target 目錄下生成 war 文件,將該文件放置于 Tomcat 的 webapps 目錄下運行即可。
2.4 前端應(yīng)用部署
前端應(yīng)用的部署更加簡單,我們直接在云服務(wù)器上下載 nginx 然后解壓。
打開網(wǎng)址 http://nginx.org/en/download.html
,點擊下圖中的鏈接下載即可。
下載解壓后,將前端頁面直接放到 nginx/html 目錄下即可。當(dāng)然如果有很多網(wǎng)頁,可以先在該目錄下建立子目錄便于歸類網(wǎng)頁。
我們建立 shop-front 目錄(表示商城系統(tǒng)的前端項目),然后將網(wǎng)頁放入其中,效果如下:
注意還需要修改 goods.html
中訪問的后端 URL 地址,假設(shè)云服務(wù)器的公網(wǎng) IP 為 x.x.x.x
,則修改為:
實例:
$.ajax({
type: "GET",
url: "http://x.x.x.x:8080/goods", //后端接口地址
dataType: "json",
contentType: "application/json; charset=utf-8",
success: function (res) {
$.each(res, function (i, v) {
row = "<tr>";
row += "<td>" + v.id + "</td>";
row += "<td>" + v.name + "</td>";
row += "<td>" + v.price + "</td>";
row += "<td>" + v.pic + "</td>";
row += "</tr>";
$("#goodsTable").append(row);
});
},
error: function (err) {
console.log(err);
}
});
此處解釋下后端地址 http://x.x.x.x:8080/goods
, HTTP 代表協(xié)議, x.x.x.x 代表云服務(wù)器公網(wǎng)地址, 8080 是我們后端項目的啟動端口,由于我們沒有在配置文件中設(shè)置,所以默認(rèn)就是 8080 ,最后 goods 是控制器中設(shè)定的后端接口路徑。
雙擊 nginx.exe 啟動 nginx ,由于 nginx 默認(rèn)啟動端口是 80 ,所以此時訪問 http://x.x.x.x
,效果如下,說明 nginx 啟動成功!
2.5 測試
現(xiàn)在我們的后端 Spring Boot 應(yīng)用已啟動,前端項目也通過 nginx 啟動起來。
我們在瀏覽器地址欄打開 http://x.x.x.x/shop-front/goods.html
,效果如下,說明我們的項目全部部署成功。
3. 視頻演示
4. 小結(jié)
前后端分離部署的方式,更能發(fā)揮服務(wù)器的性能,如果要進行版本升級,直接替換后端 jar 或者前端項目文件夾即可,輕松愉快。