詳解如何更改SpringBoot TomCat運(yùn)行方式
1. 為什么要更改SpringBoot運(yùn)行方式?
Tomcat Connector(連接器)有三種運(yùn)行模式:bio nio apr
bio(blocking I/O)
- 即阻塞式I/O操作,表示Tomcat使用的是傳統(tǒng)的Java I/O操作(即java.io包及其子包),是基于JAVA的HTTP/1.1連接器,Tomcat7以下版本在默認(rèn)情況下是以bio模式運(yùn)行的。一般而言,bio模式是三種運(yùn)行模式中性能最低的一種。我們可以通過(guò)Tomcat Manager來(lái)查看服務(wù)器的當(dāng)前狀態(tài)。(Tomcat7 或以下,在 Linux 系統(tǒng)中默認(rèn)使用這種方式)
- 一個(gè)線程處理一個(gè)請(qǐng)求,缺點(diǎn):并發(fā)量高時(shí),線程數(shù)較多,浪費(fèi)資源
nio(new I/O)
- 是Java SE 1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個(gè)基于緩沖區(qū)、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O(非阻塞IO)的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運(yùn)行性能。要讓Tomcat以nio模式來(lái)運(yùn)行只需要在Tomcat安裝目錄/conf/server.xml 中將對(duì)應(yīng)的中protocol的屬性值改為 org.apache.coyote.http11.Http11NioProtocol即可
<Connector port="1024" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000"
redirectPort="8443" />
apr(Apache Portable Runtime/Apache可移植運(yùn)行時(shí))
- Tomcat將以JNI的形式調(diào)用Apache HTTP服務(wù)器的核心動(dòng)態(tài)鏈接庫(kù)來(lái)處理文件讀取或網(wǎng)絡(luò)傳輸操作,從而大大地提高Tomcat對(duì)靜態(tài)文件的處理性能。Tomcat apr也是在Tomcat上運(yùn)行高并發(fā)應(yīng)用的首選模式。從操作系統(tǒng)級(jí)別來(lái)解決異步的IO問(wèn)題
- tomcat8.0 以上默認(rèn)已經(jīng)支持了apr(低版本趕緊換了吧)
而SpringBoot默認(rèn)是以 java -Xmx256m -Xss256k -jar xx.jar 來(lái)運(yùn)行內(nèi)置Tomcat啟動(dòng)方式默認(rèn)是NIO,所以想用Apr方式啟動(dòng)怎么辦呢?
2.移除SpringBoot內(nèi)置Tomcat容器。
更改pom文件
<packaging>jar</packaging> 改為=> <packaging>war</packaging>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 移除嵌入式tomcat插件-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 移除內(nèi)嵌Tomcat需要重新添加servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
在 Application 啟動(dòng)類中繼承SpringBootServletInitializer具體類代碼如下
package com.ctx.springboot;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
public class SpringBootStartApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringBootStartApplication.class);
}
}
這樣就可以使用把SpringBoot項(xiàng)目打包成war扔到8.0以上的tomcat里跑運(yùn)行方式默認(rèn)就變成apr了如下圖:

到此這篇關(guān)于詳解如何更改SpringBoot TomCat運(yùn)行方式的文章就介紹到這了,更多相關(guān)更改SpringBoot TomCat運(yùn)行方式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java處理時(shí)間格式CST和GMT轉(zhuǎn)換方法示例
這篇文章主要給大家介紹了關(guān)于Java處理時(shí)間格式CST和GMT轉(zhuǎn)換方法的相關(guān)資料,相信很多小伙伴在時(shí)間格式轉(zhuǎn)換的時(shí)候非常頭疼,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
Spring Cloud OAuth2 實(shí)現(xiàn)用戶認(rèn)證及單點(diǎn)登錄的示例代碼
這篇文章主要介紹了Spring Cloud OAuth2 實(shí)現(xiàn)用戶認(rèn)證及單點(diǎn)登錄的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10
Java中冒泡排序的原生實(shí)現(xiàn)方法(正序與逆序)
這篇文章主要給大家介紹了關(guān)于Java中冒泡排序的原生實(shí)現(xiàn)方法(正序與逆序)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
spring mvc中@PathVariable / 帶斜杠方式獲取
這篇文章主要介紹了spring mvc中@PathVariable / 帶斜杠方式獲取,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08
Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例
面對(duì)復(fù)雜多變的業(yè)務(wù)需求,動(dòng)態(tài)表名的處理變得愈發(fā)重要,本文主要介紹了Mybatis-Plus動(dòng)態(tài)表名的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2024-07-07
SpringBoot測(cè)試之@SpringBootTest與MockMvc的實(shí)戰(zhàn)應(yīng)用小結(jié)
本文將深入探討SpringBoot測(cè)試中兩個(gè)核心工具:@SpringBootTest注解與MockMvc測(cè)試框架的實(shí)戰(zhàn)應(yīng)用,幫助開(kāi)發(fā)者構(gòu)建更穩(wěn)健的測(cè)試體系,提高代碼質(zhì)量與可維護(hù)性,感興趣的朋友一起看看吧2025-03-03
關(guān)于MyBatis模糊查詢的幾種實(shí)現(xiàn)方式
在實(shí)際項(xiàng)目中,我們會(huì)經(jīng)常對(duì)數(shù)據(jù)做一些模糊查詢的操作,這時(shí)候就需要利用到 like字段,那么在Mybatis中,有哪些方式可以實(shí)現(xiàn)模糊查詢呢,需要的朋友可以參考下2023-05-05

