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

测试Flux服务时遭遇java.lang.ClassNotFoundException: reactor.core.scheduler.TimedScheduler

解决java.lang.ClassNotFoundException: reactor.core.scheduler.TimedScheduler问题

嘿,这个错误我之前在写WebFlux测试的时候也碰到过,本质就是依赖缺失或者版本不兼容搞的鬼。TimedScheduler是Reactor Core库里面的一个调度器接口,你的测试环境找不到它,大概率是下面几种情况:

可能的触发原因

  • Reactor Core版本太老:TimedScheduler是Reactor Core 3.4.0及以后版本才新增的接口,如果你的项目里依赖的Reactor Core版本低于这个,自然会出现找不到类的问题。
  • Spring Boot与Reactor版本不兼容:Spring Boot本身会统一管理Reactor的依赖版本,要是你手动指定了Reactor的版本,或者使用了不匹配的Spring Boot版本,很容易引发依赖冲突,导致正确版本的Reactor Core没被引入到测试环境中。
  • 测试依赖配置不全:你用到了StepVerifier(来自reactor-test库),但要么没配套引入对应的Reactor Core依赖,要么reactor-test和Reactor Core的版本不一致,也会触发这个异常。

一步步修复的办法

1. 统一Reactor版本(如果手动指定了版本)

如果你在pom.xml(Maven)或者build.gradle(Gradle)里手动声明了Reactor相关依赖的版本,一定要保证reactor-core和reactor-test的版本一致,且不低于3.4.0:

  • Maven示例:
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-core</artifactId>
    <version>3.5.11</version> <!-- 推荐使用最新稳定版或与Spring Boot兼容的版本 -->
</dependency>
<dependency>
    <groupId>io.projectreactor</groupId>
    <artifactId>reactor-test</artifactId>
    <version>3.5.11</version>
    <scope>test</scope>
</dependency>
  • Gradle示例:
testImplementation 'io.projectreactor:reactor-test:3.5.11'
implementation 'io.projectreactor:reactor-core:3.5.11'

2. 依赖Spring Boot的自动管理(最省心的方案)

既然你用到了WebTestClient和Flux,肯定是WebFlux项目,那最好不要手动指定Reactor版本,直接通过Spring Boot的starter来管理所有依赖:

  • Maven只需引入这两个starter即可:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
  • Gradle:
implementation 'org.springframework.boot:spring-boot-starter-webflux'
testImplementation 'org.springframework.boot:spring-boot-starter-test'

spring-boot-starter-test已经内置了reactor-test,不需要单独引入,这样所有依赖版本都会自动保持兼容,避免版本冲突问题。

3. 清理依赖缓存并重新构建

有时候本地依赖缓存会导致版本冲突残留,你可以执行以下命令清理缓存后重新构建项目:

  • Maven:
mvn clean install -U
  • Gradle:
./gradlew clean build --refresh-dependencies

验证修复

调整完依赖后,重新运行你的测试代码:

FluxExchangeResult<Event> result = webTestClient.get()
    .uri("/events")
    .accept(MediaType.TEXT_EVENT_STREAM)
    .exchange()
    .expectStatus()
    .isOk()
    .returnResult(Event.class);
Flux<Event> eventFlux = result.getResponseBody();
StepVerifier.create(eventFlux)
    .expectNextCount(10)
    .expectComplete()
    .verify();

如果依赖问题解决,这个测试就能正常执行,不会再抛出ClassNotFoundException异常了。

内容的提问来源于stack exchange,提问作者Karan Khanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:43:48