詳解如何更改SpringBoot TomCat運(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)行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務(wù)器的當(dāng)前狀態(tài)。(Tomcat7 或以下,在 Linux 系統(tǒng)中默認(rèn)使用這種方式) 一個線程處理一個請求,缺點(diǎn):并發(fā)量高時,線程數(shù)較多,浪費(fèi)資源nio(new I/O)
是Java SE 1.4及后續(xù)版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基于緩沖區(qū)、并能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O(非阻塞IO)的縮寫。它擁有比傳統(tǒng)I/O操作(bio)更好的并發(fā)運(yùn)行性能。要讓Tomcat以nio模式來運(yùn)行只需要在Tomcat安裝目錄/conf/server.xml 中將對應(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)行時)
Tomcat將以JNI的形式調(diào)用Apache HTTP服務(wù)器的核心動態(tài)鏈接庫來處理文件讀取或網(wǎng)絡(luò)傳輸操作,從而大大地提高Tomcat對靜態(tài)文件的處理性能。Tomcat apr也是在Tomcat上運(yùn)行高并發(fā)應(yīng)用的首選模式。從操作系統(tǒng)級別來解決異步的IO問題 tomcat8.0 以上默認(rèn)已經(jīng)支持了apr(低版本趕緊換了吧)而SpringBoot默認(rèn)是以 java -Xmx256m -Xss256k -jar xx.jar 來運(yùn)行內(nèi)置Tomcat啟動方式默認(rèn)是NIO,所以想用Apr方式啟動怎么辦呢?
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 啟動類中繼承SpringBootServletInitializer具體類代碼如下
package com.ctx.springboot;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.support.SpringBootServletInitializer;@SpringBootApplicationpublic class SpringBootStartApplication extends SpringBootServletInitializer {@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {return builder.sources(SpringBootStartApplication.class);}}
這樣就可以使用把SpringBoot項目打包成war扔到8.0以上的tomcat里跑運(yùn)行方式默認(rèn)就變成apr了如下圖:
到此這篇關(guān)于詳解如何更改SpringBoot TomCat運(yùn)行方式的文章就介紹到這了,更多相關(guān)更改SpringBoot TomCat運(yùn)行方式內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. 如何基于python3和Vue實現(xiàn)AES數(shù)據(jù)加密2. 10個提供免費(fèi)PHP腳本下載的網(wǎng)站3. PHP擴(kuò)展之APC——Alternative PHP Cache(可選PHP緩存)4. PHP設(shè)計模式(四)原型模式Prototype實例詳解【創(chuàng)建型】5. Java 基于UDP協(xié)議實現(xiàn)消息發(fā)送6. Python編寫nmap掃描工具7. Java向Runnable線程傳遞參數(shù)方法實例解析8. python 爬取嗶哩嗶哩up主信息和投稿視頻9. ASP.NET MVC前臺動態(tài)添加文本框并在后臺使用FormCollection接收值10. php5.6不能擴(kuò)展redis.so的解決方法
