您好,登錄后才能下訂單哦!
本篇內容介紹了“SpringBoot怎么切換成其它的嵌入式Servlet容器”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
然而 SpringBoot還支持其它的Servlet容器 默認的Tomcat只是其中一種
Jetty
適合用于長鏈接應用 例如聊天
Undertow
是一個高性能非阻塞的Servlet容器 并發性能非常好 但不支持jsp
若要切換 只需要在pom文件中排除自帶的Tomcat啟動器 再引入其它Servlet容器的啟動器即可
spring-boot-starter-web里面引入了spring-boot-starter-tomcat 因此默認使用Tomcat
因此 只需排除原先的Tomcat 再引入要添加的Servlet容器的依賴 即可:
切換成Jetty:
<!-- 引入Web模塊 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除tomcat容器 --> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <!-- 引入其它的Servlet容器 --> <dependency> <artifactId>spring-boot-starter-jetty</artifactId> <groupId>org.springframework.boot</groupId> </dependency>
Jetty啟動成功
同理 切換成undertow:
<!-- 引入Web模塊 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <!-- 排除tomcat容器 --> <exclusion> <artifactId>spring-boot-starter-tomcat</artifactId> <groupId>org.springframework.boot</groupId> </exclusion> </exclusions> </dependency> <!-- 引入其它的Servlet容器 --> <dependency> <artifactId>spring-boot-starter-undertow</artifactId> <groupId>org.springframework.boot</groupId> </dependency>
Undertow啟動成功
1.1、SpringBoot支持的Servlet種類及其切換
1)默認支持的webServer:Tomcat、Jrtty、Undertow
2)切換服務器
<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>
1.2、原理
1)SpringBoot應用啟動發現當前是Web應用。web場景包-導入tomcat
2)web應用會創建一個web版的ioc容器 ServletWebServerApplicationContext
3)ServletWebServerApplicationContext 啟動的時候尋找 ServletWebServerFactory(Servlet 的web服務器工廠---> Servlet 的web服務器)
4)SpringBoot底層默認有很多的WebServer工廠;
TomcatServletWebServerFactory
JettyServletWebServerFactory
UndertowServletWebServerFactory
5)底層直接會有一個自動配置類。
ServletWebServerFactoryAutoConfiguration導入了ServletWebServerFactoryConfiguration(配置類)
6)ServletWebServerFactoryConfiguration 配置類 根據動態判斷系統中到底導入了那個Web服務器的包。(默認是web-starter導入tomcat包),容器中就有 TomcatServletWebServerFactory
7)TomcatServletWebServerFactory 創建出Tomcat服務器并啟動;TomcatWebServer 的構造器擁有初始化方法initialize---this.tomcat.start();
8)內嵌服務器,就是手動把啟動服務器的代碼調用(tomcat核心jar包存在)
2.1、修改配置文件
通過對application.properties配置文件的設置,定制Servlet容器
#修改servlet容器 server.port=8000 #server.undertow.accesslog.dir=/tmp
2.2、實現 WebServerFactoryCustomizer
xxxxxCustomizer:定制化器,可以改變xxxx的默認規則
通過WebServerFactoryCustomizer修改 Servlet 容器的響應端口號:
import org.springframework.boot.web.server.WebServerFactoryCustomizer; import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory; import org.springframework.stereotype.Component; @Component public class CustomizationBean implements WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> { @Override public void customize(ConfigurableServletWebServerFactory server) { server.setPort(9000); } }
2.3、ConfigurableServletWebServerFactory
直接自定義 ConfigurableServletWebServerFactory 的接口實現類
public interface ConfigurableWebServerFactory extends WebServerFactory, ErrorPageRegistry { void setPort(int port); void setAddress(InetAddress address); void setErrorPages(Set<? extends ErrorPage> errorPages); void setSsl(Ssl ssl); void setSslStoreProvider(SslStoreProvider sslStoreProvider); void setHttp2(Http2 http2); void setCompression(Compression compression); void setServerHeader(String serverHeader); default void setShutdown(Shutdown shutdown) { } }
ConfigurableServletWebServerFactory 接口實現類(框架中默認實現類):
通過自定義 ConfigurableServletWebServerFactory 接口的實現類,即可定制Servlet容器
“SpringBoot怎么切換成其它的嵌入式Servlet容器”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。