欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?Boot通過tomcat部署項目(包含jar包、war包)的完整過程

 更新時間:2025年11月17日 11:27:33   作者:Doris_LMS  
SpringBoot是一個非常流行的Java框架,它簡化了基于Spring的應(yīng)用程序的創(chuàng)建和部署過程,這篇文章主要介紹了Spring?Boot通過tomcat部署項目(包含jar包、war包)的完整過程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

在Spring Boot項目中,有兩種常見的部署方式:

1.使用Spring Boot自帶的 內(nèi)置 Tomcat , 將項目打包為 jar 并直接運(yùn)行

2.使用 外置 Tomcat,將項目打包為 war 并部署到傳統(tǒng)的 Tomcat 服務(wù)器中

本文將從這兩種方式的基礎(chǔ)配置到實際部署,逐步展示 Spring Boot 項目如何通過內(nèi)置和外置Tomcat實現(xiàn)部署~

1、Tomcat簡介

Tomcat 是一個非常流行的 輕量級Web服務(wù)器,他用來運(yùn)行 Java語言編寫的 Web 應(yīng)用程序。Tomcat 就像是一個"中間人"或者"服務(wù)員",負(fù)責(zé)接收用戶的請求,然后把這些請求轉(zhuǎn)給后臺的java程序,處理后再把結(jié)果返回給用戶。它與傳統(tǒng)的 Web服務(wù)器 (比如Apache HTTP Server、Nginx)不同,Tomcat主要是為動態(tài) Web應(yīng)用 服務(wù)的

1.1 起源

Tomcat的起源可以追溯到 1999 年,由 Apache 軟件基金會(一個非盈利的組織,負(fù)責(zé)很多開源項目)開發(fā)出來的。它最早是 Java Servlet 和 JavaServer Pages(JSP)的參考實現(xiàn),也是一個幫助 Java 程序處理網(wǎng)頁請求的標(biāo)準(zhǔn)工具。Tomcat之所以得名,是因為Apache 基金會的成員覺得"貓科動物" 代表著敏捷、速度和輕巧。和Tomcat的特點(diǎn)非常的契合~

1.2 作用

  • 接收請求: 比如打開一個 Java Web應(yīng)用(比如說在線商店、博客網(wǎng)站),Tomcat 就負(fù)責(zé)接收你的請求,比如點(diǎn)擊商品詳細(xì)頁面。
  • 調(diào)用后臺程序:Tomcat 會把這個請求交給運(yùn)行在后臺的 Java 程序,讓它處理你的請求,比如查詢商品信息。
  • 返回網(wǎng)頁內(nèi)容:當(dāng)后臺程序處理好你的請求后,Tomcat 會把結(jié)果(比如商品詳細(xì)信息的頁面)返回給你的瀏覽器,讓你能看到網(wǎng)頁。

1.3 優(yōu)點(diǎn)

  • 免費(fèi)開源:Tomcat 是免費(fèi)的,任何人都可以下載、使用、甚至可以改進(jìn)它的代碼。對于個人和企業(yè)來說,是非常不錯的選擇
  • 輕量級:相比于其他復(fù)雜的 Java 應(yīng)用服務(wù)器(比如 WebSphere、WebLogic),Tomcat 非常輕量,不需要太多的資源,占用的內(nèi)存和 CPU 比較少。適合一些中小型的 Java Web 項目
  • 跨平臺: 不管是用Windows、Mac還是Linux,Tomcat 都可以無縫運(yùn)行,這意味著可以輕松地在不同的操作系統(tǒng)上搭建 Web 服務(wù)
  • 支持多種 Java 技術(shù): Tomcat 支持 Java Servlet、JSP 等Java技術(shù),這些技術(shù)都是開發(fā)Java Web應(yīng)用的基礎(chǔ)。

2、使用內(nèi)置Tomcat打包為Jar部署

2.1 什么是內(nèi)置Tomcat部署?

Spring Boot 默認(rèn)內(nèi)置了 Tomcat 服務(wù)器,在開發(fā)和生產(chǎn)環(huán)境中可以直接使用。打包時,將 Tomcat 與項目代碼一起打包成一個可執(zhí)行的jar文件,然后可以通過命令直接運(yùn)行該 jar 文件來啟動服務(wù)器。Spring Boot默認(rèn)使用Tomcat 作為內(nèi)嵌的Servlet 容器,有這些步驟可以驗證:

  1. 首先在自己的Spring Boot項目中的pom.xml文件中找到這一條依賴
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

ctrl+鼠標(biāo)左鍵 點(diǎn)擊spring-boot-starter-web

我們可以看到,spring-boot-starter-web這一jar包已經(jīng)引入了如下這一條依賴:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-tomcat</artifactId>
	<version>3.1.3</version>
	<scope>compile</scope>
</dependency>

根據(jù)依賴的傳遞性,可知,我們的Spring Boot項目已經(jīng)默認(rèn)使用Tomcat作為內(nèi)嵌的servlet容器。當(dāng)然我們也可以使用其他的容器,比如使用undertow作為Spring Boot的內(nèi)置容器:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>
 
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-undertow</artifactId>
</dependency>

在上面的代碼中,我們排除了spring-boot-starter-web默認(rèn)引入的tomcat,而手動引入了undertow。

2.2 Jar部署的優(yōu)勢

  • 簡單直接: 無需安裝額外的 Tomcat 服務(wù)器。
  • 開放方便: 在開發(fā)階段可以通過內(nèi)置的 Tomcat 快速啟動和調(diào)試
  • 跨平臺性:只需確保系統(tǒng)上有正確版本的 JDK, jar 文件在不同的環(huán)境中都可以輕松運(yùn)行。

2.3 Jar 部署步驟

2.3.1 項目結(jié)構(gòu)

2.3.2 確保 pom.xml 中的依賴支持打包為 Jar

在 pom.xml 文件中,確保添加了以下插件配置,以支持打包為jar:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

2.3.3 打包

第一種方式

使用IDEA中的maven管理,運(yùn)行packsge,打成jar包

第二種方式

運(yùn)行以下命令:

mvn clean package

這兩種方式本質(zhì)上是一樣的,運(yùn)行完之后就可以得到我們想要的jar包

打包完之后我們的項目target目錄就會多出現(xiàn)兩個包,如下圖所示:

其中的.jar包是我們需要的,那么.jar.original包是什么呢?

.jar.original是普通jar包,不包含依賴

.jar是可執(zhí)行jar包,包含了pom中的所有依賴,可以直接使用java -jar命令執(zhí)行

如果是部署,我們就用.jar包

如果是給別的項目用,就要給.jar.original這個包

2.3.4 運(yùn)行Jar文件

生成的jar 文件中包含了內(nèi)置的Tomcat,進(jìn)入cmd,運(yùn)行java -jar +jar包名

注意:

  • nohub 不掛斷運(yùn)行
  • log.txt 輸出的日志文件,沒有則自動創(chuàng)建
nohup java -jar test.jar >log.txt &

注意:如果想要關(guān)閉項目,直接關(guān)閉這個cmd黑窗口就可以了

2.3.5 訪問接口

使用postman測試接口會發(fā)現(xiàn)接口可以行通~

在瀏覽器輸入網(wǎng)址訪問,成功

2.3.6 配置端口和其它的參數(shù)

如果需要自定義 Tomcat 的端口、編碼或其他的配置,可以在 application.properties 或 application.yml 中進(jìn)行配置:

server.port = 9090
server.servlet.context-path = /myapp

通過這樣的方式,可以直接修改應(yīng)用啟動參數(shù)和服務(wù)器配置~

clean清除構(gòu)建結(jié)果,compile重新編譯,package重新打包

重新運(yùn)行

可見,訪問本地的端口發(fā)生了變化

3.使用外置 Tomcat 打包為 War 部署

3.1 什么是外置 Tomcat 部署?

在一些企業(yè)環(huán)境中,常常需要將Spring Boot項目打包為 war 文件并部署到現(xiàn)有的 Tomcat 服務(wù)器中。這種方式比較符合傳統(tǒng)的 Java Web 項目部署方式。

3.2 War 部署的優(yōu)勢

兼容傳統(tǒng)的項目: Tomcat 作為一個 Web 服務(wù)器,支持部署多個 Web 應(yīng)用。如果把每個應(yīng)用都打包成 war 包,然后部署到 Tomcat 中,Tomcat 能夠很好地管理這些應(yīng)用,比如對它們進(jìn)行獨(dú)立的加載、啟動、停止等操作,這種方式在長期的 Web 應(yīng)用開發(fā)和部署實踐中,形成了較為成熟和規(guī)范的流程。而如果采用其他不規(guī)范的部署方式,可能會出現(xiàn)應(yīng)用之間相互干擾、Tomcat 管理困難等問題~

靈活配置:可以在 Tomcat 服務(wù)器層面配置資源池、連接器等,使多個項目共用

3.3 War 部署

3.3.1 更換入口類

入口類要繼承SpringBootServletInitializer并重寫configure方法

我們先找到Spring Boot的入口類,入口類的名字一定包含("~Application")

@SpringBootApplication
public class SpringbootstudyApplication extends SpringBootServletInitializer {
	//繼承SpringBootServletInitializer 重寫 configure
	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder){
		return builder.sources(SpringbootstudyApplication.class);
	}
 
	public static void main(String[] args) {
		SpringApplication.run(SpringbootstudyApplication.class, args);
	}
}

3.3.2 配置 pom.xml 文件

  1. 修改打包方式

先讓IDEA知道你這次要打包成war包,在pom.xml中設(shè)置打包方式 默認(rèn)為jar 需要修改為war

<packaging>war</packaging>

如果你在自己的pom.xml文件中找不到標(biāo)簽,那么你可以自己添加,位置可以參考本圖的

添加依賴

由于 SpringBootServletInitializer 類需要用到 servlet-api 的相關(guān)jar包,所以需要添加依賴

如果你的項目是Spring Boot2.X,你就使用下面的依賴

 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>4.0.1</version><!--版本號改成你自己適用的-->
     <scope>provided</scope><!-- 使用 provided 作用域,因為外部容器會提供 Servlet API -->
 </dependency>

如果你的項目是Spring Boot3.X的,那就使用下面的依賴

<dependency>
	<groupId>jakarta.servlet</groupId>
	<artifactId>jakarta.servlet-api</artifactId>
	<version>5.0.0</version>
	<scope>provided</scope> <!-- 使用 provided 作用域,因為外部容器會提供 Servlet API -->
</dependency>

我們需要使用provided作用域是因為:

Tomcat容器中存在Servlet,Maven 只會在編譯和測試階段將相關(guān)依賴加入到類路徑中,打包時不會將其打入到最終的包中,這樣就避免了與外部容器中已有的 Servlet API 版本沖突。

3.3.3 移除Spring Boot內(nèi)嵌的Tomcat

第一種方式(推薦):

在pom.xml文件中添加以下的依賴

<!--設(shè)置此包運(yùn)行時不可用-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-tomcat</artifactId>
     <scope>provided</scope>
 </dependency>

<scope>provided</scope> 這個配置項非常重要,它的作用是 指定作用范圍 。provided 意味著這個依賴會在開發(fā)、編譯和測試環(huán)境中存在,但是不會被打包到最終的 war 文件中(因為外部運(yùn)行環(huán)境已經(jīng)有 Tomcat 服務(wù)器,所以在項目中不需要再嵌入)

第二種方式:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>

替換為:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
	<exclusions>
		<!--排除內(nèi)置tomcat jar包-->
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>

注意如果使用了這種方式,那么在開發(fā)、測試、編譯環(huán)境中我們也移除了內(nèi)置的 Tomcat 服務(wù)器,我們的Spring Boot項目就不可以在開發(fā)環(huán)境(IDEA)中運(yùn)行了

運(yùn)行時會出現(xiàn)報錯提醒~

這是因為排除內(nèi)置的 Tomcat 依賴后,Spring Boot 會認(rèn)為你不再使用嵌入式的Web 容器(比如 Tomcat、Jetty 等),而是打算將應(yīng)用部署到外部容器(如外部的 Tomcat)。這會導(dǎo)致Spring Boot 不再自動配置嵌入式的 Web 容器,因此你的應(yīng)用在 IDEA 中無法啟動,因為沒有配置 SevletWebServerFactory 這個內(nèi)置的 Servlet 容器工廠。Spring Boot 項目在 IDEA 中運(yùn)行是需要嵌入式的 Web 容器的~

這時我猜細(xì)心的同學(xué)會問了,我們在(2)中不是引入了servlet-api這個依賴嗎,這個的意思難道不是給我們的springboot項目引入容器?

當(dāng)然不是了,servlet-api 依賴是 Servlet API 的實現(xiàn),它為 Java Web 應(yīng)用程序提供了處理 HTTP 請求和響應(yīng)的核心功能。具體來說,Servlet 是 Java Web 應(yīng)用程序的基礎(chǔ)技術(shù),定義了如何接收 HTTP 請求、處理業(yè)務(wù)邏輯,并返回 HTTP 響應(yīng)??偟膩碚f,它并不提供容器,而是僅提供Java Web 應(yīng)用程序的核心 HTTP 處理能力。

推薦使用第一種移除方式,這樣你可以完全不引入servlet-api,因為內(nèi)置的tomcat服務(wù)器中已經(jīng)包含了Servlet API,所以編譯打包一點(diǎn)問題也沒有。這也是我推薦第一種移除方式的原因~

3.3.4 提醒

就是這塊地方,配置和不配置的效果都是一樣的

server.port = 9090
server.servlet.context-path = /myapp

因為yml中的server配置應(yīng)該是對內(nèi)置的tomcat 的一個配置,我們現(xiàn)在并沒有內(nèi)置 tomcat ,所以配置和不配置都是一樣的效果,都不會生效的~

  • port --> 還是以 tomcat 的配置文件中的端口啟動
  • context-path --> 還是以 war包的名字作為項目路徑

但是需要注意,就是一旦配置了,就需要將其配置對,不能有語法上的錯誤~

3.3.5 打包

在maven中雙擊package或者使用 mvn clean package命令

這個時候就可以看到出現(xiàn)了war包

總結(jié)

到此這篇關(guān)于Spring Boot通過tomcat部署項目(包含jar包、war包)的文章就介紹到這了,更多相關(guān)SpringBoot通過tomcat部署項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea亂碼修改bin目錄下的idea.exe.vmoptions無效問題

    idea亂碼修改bin目錄下的idea.exe.vmoptions無效問題

    這篇文章主要介紹了idea亂碼修改bin目錄下的idea.exe.vmoptions無效問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java與Mysql鎖相關(guān)知識總結(jié)

    Java與Mysql鎖相關(guān)知識總結(jié)

    這篇文章主要介紹了Java與Mysql鎖相關(guān)知識總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • JavaWeb實現(xiàn)打印功能

    JavaWeb實現(xiàn)打印功能

    這篇文章主要介紹了JavaWeb實現(xiàn)打印功能的相關(guān)資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-05-05
  • 淺談Spring Cloud Eureka 自我保護(hù)機(jī)制

    淺談Spring Cloud Eureka 自我保護(hù)機(jī)制

    這篇文章主要介紹了淺談Spring Cloud Eureka 自我保護(hù)機(jī)制,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • java計算指定日期為本年第幾周的實例

    java計算指定日期為本年第幾周的實例

    本文介紹了在編程中按周統(tǒng)計數(shù)據(jù)時遇到的問題,由于mysql中按所在月的周數(shù)周統(tǒng)計比較麻煩,采用所在年的周數(shù)作為分組條件,并通過java計算日期屬于年的第一周來進(jìn)行二次計算,提高性能,同時,作者也分享了計算指定日期為本年第幾周的方法,并指出了一些常見方法的缺陷
    2025-11-11
  • JDK-StringJoiner構(gòu)造及添加元素源碼分析

    JDK-StringJoiner構(gòu)造及添加元素源碼分析

    這篇文章主要為大家介紹了JDK-StringJoiner構(gòu)造及添加元素源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • SpringBoot?配置文件總結(jié)

    SpringBoot?配置文件總結(jié)

    SpringBoot中提供一個全局的配置文件:application.properties,這個配置文件的作用就是,允許我們通過這個配置文件去修改Spring?Boot自動配置的默認(rèn)值,本文詳細(xì)總結(jié)了SpringBoot配置文件,文中有詳細(xì)的代碼示例,感興趣的同學(xué)可以參考下
    2023-05-05
  • Java中的2種集合排序方法介紹

    Java中的2種集合排序方法介紹

    這篇文章主要介紹了Java中的2種集合排序方法介紹,本文直接給出代碼,相關(guān)說明請看代碼中的注釋,需要的朋友可以參考下
    2014-10-10
  • 理解zookeeper選舉機(jī)制

    理解zookeeper選舉機(jī)制

    本文主要介紹了zookeeper選舉機(jī)制的相關(guān)知識,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • PageHelper在springboot+mybatis框架中的使用步驟及原理解析

    PageHelper在springboot+mybatis框架中的使用步驟及原理解析

    這篇文章主要介紹了PageHelper在springboot+mybatis框架中的使用步驟及原理解析,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03

最新評論