SpringBoot中Package打包的實現(xiàn)小結
SpringBoot項目在日常開發(fā)中是現(xiàn)在開發(fā)形式中的基礎模式了、在構建、編碼、測試、運行、打包、部署等一系列過程中、打包的方式就是其中一個非常重要的環(huán)節(jié)、SpringBoot默認的打包方式是jar但是在日常部署的方式中、我們需要根據(jù)不同的部署情況進行講項目打成不成的包進行服務器部署、話又說來說、SpringBoot內(nèi)嵌了tomcat但是打包方式確實jar、所以在這里需要進行整理一下如何講一個SpringBoot項目打包成jar或者war進行項目發(fā)布部署。
1、前期準備工作
- 擁有 Java 開發(fā)環(huán)境以及相應 IDE
- 熟悉 Spring Boot
- 熟悉 Maven
- 掌握基本的打包部署能力
現(xiàn)有一張 User 表,其表結構如下:
| id | name | age | |
|---|---|---|---|
| 1 | Jone | 18 | test1@baomidou.com |
| 2 | Jack | 20 | test2@baomidou.com |
| 3 | Tom | 28 | test3@baomidou.com |
| 4 | Sandy | 21 | test4@baomidou.com |
| 5 | Billie | 24 | test5@baomidou.com |
| 其對應的數(shù)據(jù)庫 Schema 腳本如下: |
DROP TABLE IF EXISTS user; CREATE TABLE user ( id BIGINT(20) NOT NULL COMMENT '主鍵ID', name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名', age INT(11) NULL DEFAULT NULL COMMENT '年齡', email VARCHAR(50) NULL DEFAULT NULL COMMENT '郵箱', PRIMARY KEY (id) );
最終我們將初始化Springboot項目進行整合MybaitsPlus進行數(shù)據(jù)頁面訪問展示即可來演示打包。
訪問方式:localhost:8080/list/all

2、jar
SpringBoot項目默認的打包方式就 jar包、所以我們無需作出更多的配置就可以很輕松的進行項目打包部署。
1、pom修改
# 默認為jar、如果沒有自行編寫、默認不寫
<packaging>jar</packaging>
# 修改最終打成jar包的包名
<build>
<!--指定打包名稱-->
<finalName>springboot-jar-war</finalName>
</build>
2、新建maven打包

3、編寫maven打包執(zhí)行腳本(排除測試、關聯(lián)項目)

4、執(zhí)行打包

最終打成jar包的存放地:在target目錄下
java -jar springboot-jar-war.jar即可執(zhí)行(springboot內(nèi)嵌了tomcat)
3、war
springboot打成war運行在外部的tomcat或者服務中使用應該從以下思路開始
- 1、springboot內(nèi)嵌了tomcat、需要排除內(nèi)部容器
- 2、啟動類中springboot啟動通過main方法進入項目外部容器部署需要告知項目的入口類加載
1、pom修改
將springboot默認打包方式修改為war
<!--打包方式--> <packaging>war</packaging>
2、添加/排除依賴
因為程序在啟動、編譯的時候還是需要servlet的依賴、等生命周期應該在打包完成之前排除掉內(nèi)嵌的tomcat
所以有兩種方式、任選其中一項都是可以的(不可以兩個同時存在)
##### 方式1:打包完成后直接排除內(nèi)嵌Tomcat依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--打包排除內(nèi)部的tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
##### 方式2:打包的時候可以不用包進去,外部提供、但是可以讓參與測試編譯等生命周期
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<!--打包的時候可以不用包進去,別的設施會提供。事實上該依賴理論上可以參與編譯,測試,運行等周期。
相當于compile,但是打包階段做了exclude操作-->
<scope>provided</scope>
</dependency>
3、修改啟動項
繼承org.springframework.boot.web.servlet.support.SpringBootServletInitializer,實現(xiàn)configure方法:
SpringBootServletInitializer源碼解讀

從上述源碼注釋中可以看出

方式1:
在springboot啟動類中去繼承SpringBootServletInitializer并且重寫configure方法來指定項目的入口

@SpringBootApplication
@MapperScan("com.zkr.springbootjarwar.mapper")
public class SpringbootJarWarApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootJarWarApplication.class, args);
}
/**
* 繼承SpringbootJarWarApplication 重寫 configure
* 實現(xiàn)war外部程序主入口的指定
* @param builder
* @return
*/
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootJarWarApplication.class);
}
}
方式2:
新增加一個類繼承SpringBootServletInitializer實現(xiàn)configure:
/**
* @author LG
* @date 2021/2/23 - 17:23
* @Motto "何必余生、及時行樂、Good luck mi"
*/
public class Springbootjarwar extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
//此處的Application.class為帶有@SpringBootApplication注解的啟動類
return builder.sources(SpringbootJarWarApplication.class);
}
}
- 更加推薦使用第一種!不要問經(jīng)驗所得
maven執(zhí)行打包腳本生成war

4、部署外部容器
以Tomcat為例:
將war放入Tomcat的WebApps目錄下
然后啟動tomcat



訪問成功:但是訪問的時候需要添加包名才可以
注意事項:
使用外部Tomcat部署訪問的時候,application.properties(或者application.yml)中配置的
server.port=
server.servlet.context-path=
將失效,請使用tomcat的端口,tomcat,webapps下項目名進行訪問。
為了防止應用上下文所導致的項目訪問資源加載不到的問題,
建議pom.xml文件中標簽下添加最終的包名指定標簽:
4、解決訪問路徑
我們將項目打成war包之后、可能在有些時候需要添加項目名稱來訪問、但有時候不需要、就想springboot中application.yml中可以通過server.servlet.context-path=來指定、那么外部的時候Tomcat也可以指定。并且修改端口

# path : / 表示不需要項目名 # docBase:項目路徑 這里寫相對路徑、相對webapps、不要問我怎么知道的 appBase有指定 <Context path="/" docBase="項目地址路徑" debug="0" />
5、端口修改
Tomcat默認為8080
可以在這里修改指定端口

6、總結
jar不需要修改任何配置、使用maven進行腳本打包即可
war:需要排除內(nèi)部tomcat、或者添加編譯測試運行等周期的servlet支持、在最終同樣也排除了容器
?springbootApplication應用main類繼承SpringBootServletInitializer類實現(xiàn)configure在進行項目打包即可!
到此這篇關于SpringBoot中Package打包的實現(xiàn)小結的文章就介紹到這了,更多相關SpringBoot Package打包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解 Java Maximum redirects (100) exceeded
這篇文章主要介紹了詳解 Java Maximum redirects (100) exceeded的相關資料,需要的朋友可以參考下2017-05-05
SpringBoot定時任務多實例互斥執(zhí)行的完整指南
Spring Boot 的 @Scheduled 寫定時任務很方便,但多實例部署時有個問題,同一個定時任務會在每臺機器上都觸發(fā)執(zhí)行,下面我們就來看看如何解決吧2026-01-01
使用SpringBoot AOP 記錄操作日志、異常日志的過程
這篇文章主要介紹了使用SpringBoot AOP 記錄操作日志、異常日志的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-05-05
詳解SpringBoot 快速整合Mybatis(去XML化+注解進階)
本篇文章主要介紹了詳解SpringBoot 快速整合Mybatis(去XML化+注解進階),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-11-11
MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解
這篇文章主要介紹了MyBatis-Plus QueryWrapper及LambdaQueryWrapper的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03
idea使用pagehelper實現(xiàn)后端分頁功能的步驟詳解
這篇文章主要介紹了idea使用pagehelper實現(xiàn)后端分頁功能的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

