詳解如何更改SpringBoot TomCat運行方式

1. 為什麼要更改SpringBoot運行方式?

Tomcat Connector(連接器)有三種運行模式:bio nio apr

bio(blocking I/O)

  • 即阻塞式I/O操作,表示Tomcat使用的是傳統的Java I/O操作(即java.io包及其子包),是基於JAVA的HTTP/1.1連接器,Tomcat7以下版本在默認情況下是以bio模式運行的。一般而言,bio模式是三種運行模式中性能最低的一種。我們可以通過Tomcat Manager來查看服務器的當前狀態。(Tomcat7 或以下,在 Linux 系統中默認使用這種方式)
  • 一個線程處理一個請求,缺點:並發量高時,線程數較多,浪費資源

nio(new I/O)

  • 是Java SE 1.4及後續版本提供的一種新的I/O操作方式(即java.nio包及其子包)。Java nio是一個基於緩沖區、並能提供非阻塞I/O操作的Java API,因此nio也被看成是non-blocking I/O(非阻塞IO)的縮寫。它擁有比傳統I/O操作(bio)更好的並發運行性能。要讓Tomcat以nio模式來運行隻需要在Tomcat安裝目錄/conf/server.xml 中將對應的中protocol的屬性值改為 org.apache.coyote.http11.Http11NioProtocol即可
 <Connector port="1024" protocol="org.apache.coyote.http11.Http11NioProtocol"
               connectionTimeout="20000"
               redirectPort="8443" />

apr(Apache Portable Runtime/Apache可移植運行時)

  • Tomcat將以JNI的形式調用Apache HTTP服務器的核心動態鏈接庫來處理文件讀取或網絡傳輸操作,從而大大地提高Tomcat對靜態文件的處理性能。Tomcat apr也是在Tomcat上運行高並發應用的首選模式。從操作系統級別來解決異步的IO問題
  • tomcat8.0 以上默認已經支持瞭apr(低版本趕緊換瞭吧)

而SpringBoot默認是以 java -Xmx256m -Xss256k -jar xx.jar 來運行內置Tomcat啟動方式默認是NIO,所以想用Apr方式啟動怎麼辦呢?

2.移除SpringBoot內置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>

        <!-- 移除內嵌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;
	@SpringBootApplication
	public class SpringBootStartApplication extends SpringBootServletInitializer {
		@Override
		protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
			return builder.sources(SpringBootStartApplication.class);
		}
	}

這樣就可以使用把SpringBoot項目打包成war扔到8.0以上的tomcat裡跑運行方式默認就變成apr瞭如下圖:

這裡寫圖片描述

到此這篇關於詳解如何更改SpringBoot TomCat運行方式的文章就介紹到這瞭,更多相關更改SpringBoot TomCat運行方式內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: