WebFlux是为Netty设计的,这是一个异步和非阻塞的应用服务器,而不是Tomcat这样的传统servlet容器。
确实可以在Servlet 3.1+容器上运行WebFlux应用,只是这样做会有一些限制和需要特定的配置。为了使WebFlux应用在Tomcat上工作,你可以尝试以下步骤:
- 修改POM文件:
- 添加
spring-boot-starter-tomcat
依赖,确保它与你使用的Tomcat版本兼容。 - 确保移除或排除Netty的相关依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
- 修改Application主类:
你的主要Spring Boot应用类需要扩展
SpringBootServletInitializer
。
@SpringBootApplication
public class YourApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(YourApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(YourApplication.class);
}
}
- 配置文件更新:
在你的
application.properties
或application.yml
中,确保设置spring.main.web-application-type=servlet
。 - 打包为WAR:
在
pom.xml
中,修改packaging
为war
。 - 确保Servlet 3.1+支持: WebFlux需要Servlet 3.1+。你正在使用Tomcat 9,所以这应该是满足的。
- 部署并测试: 将应用部署到Tomcat并进行测试。
请注意,即使按照上述步骤进行配置,WebFlux在Tomcat上运行时仍然会使用异步servlet,这可能会与传统的servlet应用有所不同。如果可能的话,考虑在生产环境中直接使用WebFlux的推荐运行时Netty,这样可以得到最佳性能和充分利用WebFlux的所有特性。
标签:Tomcat,Servlet,部署,webflux,WebFlux,application,spring,servlet From: https://blog.51cto.com/u_16170893/7194163