Spring Boot 3 指南 四、WebFlux(7)选择并配置嵌入式服务器

问题

你想要使用Undertow作为嵌入式容器而不是默认的Reactor Netty容器。

解决方案

排除Reactor Netty运行时并包含Undertow运行时。Spring Boot将自动检测类路径上是否有Tomcat、Jetty、Reactor Netty或Undertow,并相应地配置容器。

它是如何工作的

第4章 WebFlux

Spring Boot原生支持Tomcat、Jetty、Reactor Netty和Undertow作为嵌入式响应式容器。默认情况下,Spring Boot使用Reactor Netty作为容器(通过
spring-boot-starter-webflux工件中的
spring-boot-starter-reactor-netty依赖项表示)。可以使用属性配置容器,其中一些适用于所有容器,而其他一些则特定于某个容器。全局属性以server或server.reactive为前缀,而容器则以server.开头(其中container是tomcat、jetty、netty或undertow之一)。

设置通用配置属性

有几个通用服务器属性是可用的,如表4-4和表4-5所示。



使用Spring Session时,只有
server.servlet.session.timeout属性适用!

最后,Spring Boot 通过暴露一些属性使得配置SSL变得容易;参见表4-6和食谱4-8了解如何配置SSL。

所有在前面表格中提到的属性仅适用于使用嵌入式容器运行应用程序的情况。当部署到外部容器时(例如,部署WAR文件),这些设置不适用!

更改运行时容器

当包含
spring-boot-starter-webflux依赖时,它将自动包含对Reactor Netty容器的依赖,因为它依赖于
spring-boot-starter-reactor-netty构件。要启用不同的servlet容器,需要排除
spring-boot-starter-reactor-netty,并包含spring-boot-starter-jetty或
spring-boot-starter-undertow中的一个。参见列表4-31。

在Maven中,你可以在内使用元素来排除一个依赖项。

现在当应用程序启动时,它将使用Undertow而不是Reactor Netty启动(参见图4-8)。