You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot反应式应用启动报错:缺少ReactiveWebServerFactory Bean

解决Spring Boot Reactive Web Server启动错误:Missing ReactiveWebServerFactory Bean

我来帮你分析这个报错:Unable to start ReactiveWebApplicationContext due to missing ReactiveWebServerFactory bean,这个问题一般出在三个地方——要么是缺少WebFlux核心依赖,要么是没写Spring Boot必备的主启动类,要么是测试类的配置没搭对。下面我一步步给你解决:

1. 先检查WebFlux依赖是否到位

你要启动的是响应式Web应用,必须确保项目依赖里包含Spring WebFlux。根据你的构建工具,添加对应的依赖:

Maven(pom.xml)

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

Gradle(build.gradle)

implementation 'org.springframework.boot:spring-boot-starter-webflux'

添加后刷新依赖,这是解决这个报错最常见的原因。

2. 补写Spring Boot主启动类

你的代码里只有RootController,但Spring Boot需要一个带@SpringBootApplication注解的主类来扫描组件、初始化上下文。在bubbleshadow包下创建这个类:

package bubbleshadow;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class BubbleShadowApplication {
    public static void main(String[] args) {
        SpringApplication.run(BubbleShadowApplication.class, args);
    }
}

@SpringBootApplication自带组件扫描功能,会自动识别同包及子包下的@RestController,这样Spring才能找到你的控制器并配置好上下文。

3. 修正测试类的配置

你现在的测试类用了@SpringBootTest(classes=RootController.class),这会导致Spring只加载单个控制器,没法加载完整的WebFlux自动配置。可以改成加载主启动类,或者用更轻量的@WebFluxTest:

方案一:修改@SpringBootTest配置

package test.bubbleshadow;

import bubbleshadow.BubbleShadowApplication;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

@ExtendWith(SpringExtension.class)
// 改为加载主启动类,让Spring初始化完整上下文
@SpringBootTest(classes = BubbleShadowApplication.class, webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureWebTestClient
public class RootControllerTest {

    @Autowired
    WebTestClient webTestClient;

    @Test
    public void baseRouteShouldReturnStatusOK() {
        webTestClient.head().uri("/").exchange().expectStatus().isOk();
    }
}

方案二:用@WebFluxTest做轻量测试

如果你只是想测试WebFlux控制器,推荐用@WebFluxTest,它会只加载WebFlux相关配置,启动更快:

package test.bubbleshadow;

import bubbleshadow.RootController;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.reactive.WebFluxTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.web.reactive.server.WebTestClient;

@ExtendWith(SpringExtension.class)
@WebFluxTest(RootController.class)
public class RootControllerTest {

    @Autowired
    WebTestClient webTestClient;

    @Test
    public void baseRouteShouldReturnStatusOK() {
        webTestClient.head().uri("/").exchange().expectStatus().isOk();
    }
}

这样就不需要@SpringBootTest和@AutoConfigureWebTestClient了,@WebFluxTest会自动配置WebTestClient。

总结一下操作步骤

  • 确认添加spring-boot-starter-webflux依赖
  • 创建带@SpringBootApplication的主启动类
  • 修正测试类配置,确保加载完整上下文或使用轻量测试注解

按照上面的步骤修改后,你的应用应该就能正常启动,测试也能顺利运行了。

内容的提问来源于stack exchange,提问作者Daniel Lynch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:40:00