然而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啟動成功
SpringBoot web開發_嵌入式Servlet容器1、切換嵌入式Servlet容器1.1、SpringBoot支援的Servlet種類及其切換
1)預設支援的webServer:Tomcat、Jrtty、Undertow2)切換伺服器
<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場景包-導入tomcat2)web應用程式會建立一個web版的ioc容器ServletWebServerApplicationContext3)ServletWebServerApplicationContext 啟動的時候尋找ServletWebServerFactory(ServletWebServerApplicationContext 啟動的時候尋找ServletWebServerFactory(Servlet 的伺服器工廠---> Servlet 的web伺服器)4)SpringBoot底層預設有很多的WebServer工廠;ServletWebServerFactoryAutoConfiguration匯入了ServletWebServerFactoryConfiguration(設定類別)
6)ServletWebServerFactoryConfiguration 設定類別 根據動態判斷系統中到底導入了那個Web伺服器的套件。 (預設是web-starter導入tomcat套件),容器中就有TomcatServletWebServerFactory
7)TomcatServletWebServerFactory 建立出Tomcat伺服器並啟動;TomcatWebServer 的建構器擁有初始化方法initialize---this.tomcat.start() ;
8)內嵌伺服器,就是手動把啟動伺服器的程式碼呼叫(tomcat核心jar包存在)
2、客製化Servlet容器
2.1、修改設定檔透過對application.properties設定檔的設置,自訂Servlet容器
#修改servlet容器 server.port=8000 #server.undertow.accesslog.dir=/tmp
xxxxx
Customizer:客製化器,可以改變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);
}
}
##直接自訂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 介面的實作類,即可自訂Servlet容器
以上是SpringBoot怎麼切換成它的嵌入式Servlet容器的詳細內容。更多資訊請關注PHP中文網其他相關文章!