最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

在Spring Boot項(xiàng)目中,有兩種常見的部署方式:

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

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

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

1、Tomcat簡介

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

1.1 起源

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

1.2 作用

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

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

  • 免費(fèi)開源:Tomcat 是免費(fèi)的,任何人都可以下載、使用、甚至可以改進(jìn)它的代碼。對于個(gè)人和企業(yè)來說,是非常不錯(cuò)的選擇
  • 輕量級:相比于其他復(fù)雜的 Java 應(yīng)用服務(wù)器(比如 WebSphere、WebLogic),Tomcat 非常輕量,不需要太多的資源,占用的內(nèi)存和 CPU 比較少。適合一些中小型的 Java Web 項(xiàng)目
  • 跨平臺(tái): 不管是用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)境中可以直接使用。打包時(shí),將 Tomcat 與項(xiàng)目代碼一起打包成一個(gè)可執(zhí)行的jar文件,然后可以通過命令直接運(yùn)行該 jar 文件來啟動(dòng)服務(wù)器。Spring Boot默認(rèn)使用Tomcat 作為內(nèi)嵌的Servlet 容器,有這些步驟可以驗(yàn)證:

  1. 首先在自己的Spring Boot項(xiàng)目中的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項(xiàng)目已經(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,而手動(dòng)引入了undertow。

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

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

2.3 Jar 部署步驟

2.3.1 項(xiàng)目結(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包

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

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

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

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

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

如果是給別的項(xiàng)目用,就要給.jar.original這個(gè)包

2.3.4 運(yùn)行Jar文件

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

注意:

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

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

2.3.5 訪問接口

使用postman測試接口會(huì)發(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)用啟動(dòng)參數(shù)和服務(wù)器配置~

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

重新運(yùn)行

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

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

3.1 什么是外置 Tomcat 部署?

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

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

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

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

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包,所以需要添加依賴

如果你的項(xiàng)目是Spring Boot2.X,你就使用下面的依賴

 <dependency>
     <groupId>javax.servlet</groupId>
     <artifactId>javax.servlet-api</artifactId>
     <version>4.0.1</version><!--版本號(hào)改成你自己適用的-->
     <scope>provided</scope><!-- 使用 provided 作用域,因?yàn)橥獠咳萜鲿?huì)提供 Servlet API -->
 </dependency>

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

<dependency>
	<groupId>jakarta.servlet</groupId>
	<artifactId>jakarta.servlet-api</artifactId>
	<version>5.0.0</version>
	<scope>provided</scope> <!-- 使用 provided 作用域,因?yàn)橥獠咳萜鲿?huì)提供 Servlet API -->
</dependency>

我們需要使用provided作用域是因?yàn)椋?/p>

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

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

第一種方式(推薦):

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

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

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

第二種方式:

<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項(xiàng)目就不可以在開發(fā)環(huán)境(IDEA)中運(yùn)行了

運(yùn)行時(shí)會(huì)出現(xiàn)報(bào)錯(cuò)提醒~

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

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

當(dāng)然不是了,servlet-api 依賴是 Servlet API 的實(shí)現(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,因?yàn)閮?nèi)置的tomcat服務(wù)器中已經(jīng)包含了Servlet API,所以編譯打包一點(diǎn)問題也沒有。這也是我推薦第一種移除方式的原因~

3.3.4 提醒

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

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

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

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

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

3.3.5 打包

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

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

總結(jié)

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

相關(guān)文章

  • Java?String之contains方法的使用詳解

    Java?String之contains方法的使用詳解

    這篇文章主要介紹了Java?String之contains方法的使用詳解,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼

    spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring-boot中使用spring-boot-devtools的實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • java 遍歷Map及Map轉(zhuǎn)化為二維數(shù)組的實(shí)例

    java 遍歷Map及Map轉(zhuǎn)化為二維數(shù)組的實(shí)例

    這篇文章主要介紹了java 遍歷Map及Map轉(zhuǎn)化為二維數(shù)組的實(shí)例的相關(guān)資料,希望通過本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-08-08
  • 基于springboot處理date參數(shù)過程解析

    基于springboot處理date參數(shù)過程解析

    這篇文章主要介紹了基于springboot處理date參數(shù)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Java訪問數(shù)據(jù)庫實(shí)例詳解

    Java訪問數(shù)據(jù)庫實(shí)例詳解

    這篇文章主要為大家詳細(xì)介紹了Java訪問數(shù)據(jù)庫實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • spring boot整合RabbitMQ(Direct模式)

    spring boot整合RabbitMQ(Direct模式)

    springboot集成RabbitMQ非常簡單,如果只是簡單的使用配置非常少,springboot提供了spring-boot-starter-amqp項(xiàng)目對消息各種支持。下面通過本文給大家介紹下spring boot整合RabbitMQ(Direct模式),需要的朋友可以參考下
    2017-04-04
  • Java實(shí)現(xiàn)歸并排序的方法詳解(包含遞歸+非遞歸)

    Java實(shí)現(xiàn)歸并排序的方法詳解(包含遞歸+非遞歸)

    歸并歸分n時(shí)間復(fù)雜度O(nlogn)的歸并排序,遞歸與迭代實(shí)現(xiàn),穩(wěn)定排序適用于大數(shù)據(jù)處理,本文詳細(xì)解析了遞歸與非遞歸版本的實(shí)現(xiàn)邏輯與應(yīng)用場景,需要的朋友可以參考下
    2026-05-05
  • java: 程序包c(diǎn)om.fasterxml.jackson.annotation不存在的解決辦法

    java: 程序包c(diǎn)om.fasterxml.jackson.annotation不存在的解決辦法

    當(dāng)我們在導(dǎo)入程序之后,系統(tǒng)給出錯(cuò)誤提示:java: 程序包c(diǎn)om.fasterxml.jackson.annotation不存在,本文主要介紹了Java程序包不存在的三種解決方法,需要的朋友可以參考下
    2024-02-02
  • SpringBoot整合MyBatis-Flex的保姆級教程

    SpringBoot整合MyBatis-Flex的保姆級教程

    MyBatis-Flex 是一個(gè)基于 MyBatis 的增強(qiáng)框架,它提供了比傳統(tǒng) MyBatis Plus 更加強(qiáng)大和靈活的功能特性,下面我們就來看看如何在SpringBoot中整合MyBatis-Flex吧
    2026-01-01
  • Android開發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解

    Android開發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解

    這篇文章主要介紹了Android開發(fā)中Socket通信的基本實(shí)現(xiàn)方法講解,是安卓上移動(dòng)互聯(lián)網(wǎng)程序開發(fā)的基礎(chǔ),需要的朋友可以參考下
    2015-12-12

最新評論

明水县| 桦川县| 普定县| 德保县| 封丘县| 乌什县| 防城港市| 蛟河市| 芷江| 黑山县| 德安县| 宣恩县| 从江县| 玛曲县| 盐源县| 资中县| 阆中市| 茌平县| 东乡县| 广丰县| 张家川| 永靖县| 抚顺县| 和林格尔县| 宜春市| 措勤县| 会同县| 沈阳市| 改则县| 军事| 石首市| 兴安盟| 淮北市| 米脂县| 即墨市| 镇坪县| 西藏| 育儿| 双城市| 乐安县| 肇州县|