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

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

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

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

1.使用Spring Boot自帶的 內置 Tomcat , 將項目打包為 jar 并直接運行

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

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

1、Tomcat簡介

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

1.1 起源

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

1.2 作用

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

1.3 優(yōu)點

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

2、使用內置Tomcat打包為Jar部署

2.1 什么是內置Tomcat部署?

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

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

ctrl+鼠標左鍵 點擊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)默認使用Tomcat作為內嵌的servlet容器。當然我們也可以使用其他的容器,比如使用undertow作為Spring Boot的內置容器:

<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默認引入的tomcat,而手動引入了undertow。

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

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

2.3 Jar 部署步驟

2.3.1 項目結構

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管理,運行packsge,打成jar包

第二種方式

運行以下命令:

mvn clean package

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

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

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

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

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

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

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

2.3.4 運行Jar文件

生成的jar 文件中包含了內置的Tomcat,進入cmd,運行java -jar +jar包名

注意:

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

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

2.3.5 訪問接口

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

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

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

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

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

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

clean清除構建結果,compile重新編譯,package重新打包

重新運行

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

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

3.1 什么是外置 Tomcat 部署?

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

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

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

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

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中設置打包方式 默認為jar 需要修改為war

<packaging>war</packaging>

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

添加依賴

由于 SpringBootServletInitializer 類需要用到 servlet-api 的相關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 只會在編譯和測試階段將相關依賴加入到類路徑中,打包時不會將其打入到最終的包中,這樣就避免了與外部容器中已有的 Servlet API 版本沖突。

3.3.3 移除Spring Boot內嵌的Tomcat

第一種方式(推薦):

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

<!--設置此包運行時不可用-->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-tomcat</artifactId>
     <scope>provided</scope>
 </dependency>

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

第二種方式:

<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>
		<!--排除內置tomcat jar包-->
		<exclusion>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
		</exclusion>
	</exclusions>
</dependency>

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

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

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

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

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

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

3.3.4 提醒

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

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

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

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

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

3.3.5 打包

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

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

總結

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

相關文章

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

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

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

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

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

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

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

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

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

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

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

    spring boot整合RabbitMQ(Direct模式)

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

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

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

    java: 程序包com.fasterxml.jackson.annotation不存在的解決辦法

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

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

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

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

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

最新評論

瑞金市| 西藏| 石城县| 玛多县| 阿城市| 顺义区| 石阡县| 三河市| 宝清县| 武陟县| 德阳市| 泸定县| 新竹市| 明溪县| 岳普湖县| 上饶县| 克东县| 西丰县| 浑源县| 东港市| 临潭县| 龙南县| 花垣县| 新竹市| 四子王旗| 屏南县| 体育| 四会市| 石门县| 安塞县| 高唐县| 夹江县| 和硕县| 如皋市| 清新县| 太谷县| 潜山县| 蓬莱市| 齐河县| 海安县| 鹤庆县|