Maison >Java >javaDidacticiel >Comment basculer SpringBoot vers d'autres conteneurs de servlets intégrés
Cependant, SpringBoot prend également en charge d'autres conteneurs de servlets. Le Tomcat par défaut n'est que l'un d'entre eux
Jetty
convient aux applications à liens longs telles que le chatJetty
适合用于长链接应用 例如聊天
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
Undertow
est un conteneur de servlet non bloquant haute performance avec très bonnes performances de concurrence mais ne prend pas en charge jsp
Si vous souhaitez changer, il vous suffit de
exclure le démarreur Tomcat intégré dans le fichier pom, puis d'introduire les démarreurs des autres conteneurs de servlets
spring-boot-starter-web a introduit spring-boot-starter-tomcat, donc la valeur par défaut Utiliser TomcatIl suffit donc d'exclure le Tomcat d'origine et d'introduire la dépendance du conteneur Servlet à ajouter :Passer à Jetty :
#修改servlet容器 server.port=8000 #server.undertow.accesslog.dir=/tmp
Jetty a démarré avec succès
Changement similaire à sous-tendre :
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); } }"Undertow a démarré avec succès" 2) Changer de serveur
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) { } }1.2, Principe
1) Lorsque l'application SpringBoot démarre, on constate qu'il s'agit actuellement d'une application web. package de scénario Web - import tomcat
2) L'application Web créera une version Web du conteneur ioc ServletWebServerApplicationContext3) ServletWebServerApplicationContext Au démarrage, recherchez ServletWebServerFactory (usine de serveur Web de Servlet ---> Serveur Web de Servlet)
4 ) Il existe de nombreuses usines WebServer au bas de SpringBoot par défaut ;5) Il y aura une classe de configuration automatique directement en bas.
ServletWebServerFactoryAutoConfiguration importe ServletWebServerFactoryConfiguration (classe de configuration)
6) La classe de configuration ServletWebServerFactoryConfiguration détermine dynamiquement quel package de serveur Web a été importé dans le système. (La valeur par défaut est que web-starter importe le package Tomcat), et il y a TomcatServletWebServerFactory dans le conteneur7) TomcatServletWebServerFactory crée un serveur Tomcat et le démarre ; le constructeur de TomcatWebServer a une méthode d'initialisation initialize---this.tomcat. start();
🎜8 ) Le serveur intégré consiste à appeler manuellement le code pour démarrer le serveur (le package Tomcat Core Jar existe) 🎜🎜2 Personnaliser le conteneur de servlet 🎜🎜🎜Modifier le fichier de configuration 🎜🎜🎜 Personnaliser le. Servlet en définissant le fichier de configuration application.properties Container 🎜rrreee🎜🎜2.2, implémentez WebServerFactoryCustomizer🎜🎜🎜🎜xxxxx🎜🎜Customizer🎜🎜 : Customizer, vous pouvez modifier les règles par défaut de xxxx🎜🎜🎜Modifier le numéro de port de réponse du Servlet conteneur via 🎜WebServerFactoryCustomizer🎜 : 🎜rrreee🎜🎜2.3, ConfigurableServletWebServerFactory 🎜🎜🎜Personnaliser directement la classe d'implémentation d'interface de 🎜ConfigurableServletWebServerFactory 🎜🎜rrreee🎜🎜ConfigurableServletWebServerFactory 🎜Classe d'implémentation d'interface (classe d'implémentation par défaut dans le framework) : 🎜🎜🎜🎜🎜By personnalisation 🎜ConfigurableServletWebServerFactory 🎜classe d'implémentation de l'interface, c'est tout Conteneur de servlet personnalisé🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!