Spring Webflux中Reactor Netty HttpServer.create传参编译报错
问题根因
- 你当前工程通过Spring Boot 2.4.2的依赖管理,锁定的Reactor Netty版本为1.0.x,该版本下
reactor.netty.http.server.HttpServer类仅提供无参静态create()方法,不存在接收String host、int port两个入参的重载方法。你调用的双参create()签名是Reactor Netty 1.1.x版本才新增的API,和当前工程依赖版本不匹配,因此直接触发编译报错。 - 常见诱因是参考了Reactor Netty新版教程的写法,没有对齐当前工程的依赖版本;同时你搭建的是Spring Boot Webflux工程,但目前主类没有引入Spring Boot的启动逻辑,直接手写底层Netty启动代码时混用了不同版本的框架调用规则。
正确实现方案
场景1:纯原生Reactor Netty(脱离Spring容器启动服务)
按照当前1.0.x版本的API调用链路,通过实例方法绑定监听地址、端口,完成服务启动,修正后的主类代码:
package com.pinodev.helloServer; import reactor.core.publisher.Mono; import reactor.netty.http.server.HttpServer; public class HelloServerApplication { public static void main(String[] args) { HttpServer.create() // 通过实例方法绑定监听地址 .host("localhost") // 通过实例方法绑定端口 .port(8080) // 配置请求处理路由 .route(routes -> routes.get("/hello", (req, res) -> res.sendString(Mono.just("Hello Webflux Server")) )) // 绑定端口并启动服务 .bindNow(); } }
注意:上述代码中用到的Mono类已经由spring-boot-starter-webflux传递引入,无需在build.gradle中额外添加依赖。
场景2:标准Spring Boot Webflux工程启动(匹配课程学习场景)
结合你当前的Gradle配置(已经引入Spring Boot插件、webflux starter依赖),不需要手动编写Reactor Netty的启动逻辑,通过Spring Boot自动装配机制即可完成服务启动,修正后的主类代码:
package com.pinodev.helloServer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HelloServerApplication { public static void main(String[] args) { SpringApplication.run(HelloServerApplication.class, args); } }
如果需要自定义监听地址和端口,可在src/main/resources/application.properties中添加配置:
# 自定义服务监听地址 server.address=localhost # 自定义服务监听端口 server.port=8080
这种写法下Spring Boot会自动完成内嵌Netty服务装配、请求路由映射等通用逻辑,是Spring Boot Webflux工程的常规实现方式,也更匹配多数Java课程的教学内容。
内容的提问来源于stack exchange,提问作者user14219868
相关产品推荐
相关产品推荐

