Maison  >  Article  >  Java  >  Comment basculer SpringBoot vers d'autres conteneurs de servlets intégrés

Comment basculer SpringBoot vers d'autres conteneurs de servlets intégrés

王林
王林avant
2023-05-13 22:58:121484parcourir

Comment passer à d'autres conteneurs de servlets intégrés (Jetty et Undertow)

Le conteneur de servlets intégré par défaut utilisé par SpringBoot est Tomcat

Cependant, SpringBoot prend également en charge d'autres conteneurs de servlets. Le Tomcat par défaut n'est que l'un d'entre eux

SpringBoot. prend également en charge Jetty et Undertow

  • Jetty convient aux applications à liens longs telles que le chatJetty适合用于长链接应用 例如聊天

  • Undertow是一个高性能非阻塞的Servlet容器 并发性能非常好 但不支持jsp

Comment basculer SpringBoot vers dautres conteneurs de servlets intégrés

若要切换 只需要在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>

Comment basculer SpringBoot vers dautres conteneurs de servlets intégrés

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>

Comment basculer SpringBoot vers dautres conteneurs de servlets intégrés

Undertow启动成功

SpringBoot web开发_嵌入式Servlet容器

1、切换嵌入式Servlet容器

1.1、SpringBoot支持的Servlet种类及其切换

1)默认支持的webServer:Tomcat、Jrtty、Undertow

2)切换服务器

Comment basculer SpringBoot vers dautres conteneurs de servlets intégrés

<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

Comment passer SpringBoot à un autre conteneurs de servlets intégrés

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 Tomcat

Il 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

Comment basculer SpringBoot vers d'autres conteneurs de servlets intégrés

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);
    }
}
Comment basculer SpringBoot vers d'autres conteneurs de servlets intégrés "Undertow a démarré avec succès" 2) Changer de serveur

Comment basculer SpringBoot vers d'autres conteneurs de servlets intégrés

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 ServletWebServerApplicationContext

3) 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.

Comment basculer SpringBoot vers dautres conteneurs de servlets intégrésServletWebServerFactoryAutoConfiguration 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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer