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

升级SpringBoot3.1.2后MVC集成GraphQL报No ContextAccessor异常求助

问题描述

将基于Maven构建、集成spring-boot-starter-web与spring-boot-starter-graphql的MVC项目升级至Spring Boot 3.1.2版本后,通过GraphiQL或Postman调用GraphQL接口时抛出以下异常:

java.lang.IllegalStateException: No ContextAccessor for contextType: class reactor.util.context.Context0 
at io.micrometer.context.ContextRegistry.getContextAccessorForWrite(ContextRegistry.java:220) 
at io.micrometer.context.DefaultContextSnapshot.updateContextInternal(DefaultContextSnapshot.java:63) 
at io.micrometer.context.DefaultContextSnapshot.updateContext(DefaultContextSnapshot.java:43) 
at reactor.core.publisher.MonoContextWrite.subscribeOrReturn(MonoContextWrite.java:38) 
at reactor.core.publisher.Mono.subscribe(Mono.java:4475) 
at reactor.core.publisher.Mono.subscribeWith(Mono.java:4605) 
at reactor.core.publisher.Mono.toFuture(Mono.java:5010) 
at org.springframework.core.ReactiveAdapterRegistry$ReactorRegistrar.lambda$registerAdapters$5(ReactiveAdapterRegistry.java:244) 
at org.springframework.core.ReactiveAdapter.fromPublisher(ReactiveAdapter.java:121) 
at org.springframework.web.servlet.function.DefaultAsyncServerResponse.create(DefaultAsyncServerResponse.java:186) 
at org.springframework.web.servlet.function.ServerResponse.async(ServerResponse.java:250) 
at org.springframework.graphql.server.webmvc.GraphQlHttpHandler.handleRequest(GraphQlHttpHandler.java:111) 
at org.springframework.web.servlet.function.support.HandlerFunctionAdapter.handle(HandlerFunctionAdapter.java:107) 
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1081) 
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:974) 
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1011) 
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:914) 
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:590) 
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) 
at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149) 
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
解决思路

这个异常核心是Micrometer Context无法找到适配Reactor Context的ContextAccessor,针对Spring Boot 3.1.2的MVC+GraphQL场景,可按以下步骤排查解决:

  • 检查依赖版本一致性:确保项目未手动指定冲突的micrometer-context或Reactor相关版本,直接依赖Spring Boot的依赖管理即可。若之前手动添加过相关依赖版本,删除自定义配置,让Spring Boot自动协调版本。

  • 补充Reactor Context适配依赖:手动引入micrometer-reactor-context依赖,该依赖提供了Reactor Context对应的ContextAccessor,解决适配缺失问题。在pom.xml中添加:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-reactor-context</artifactId>
</dependency>
  • 排查GraphQL上下文配置:项目是MVC环境(非WebFlux),需确保GraphQL的DataFetcher等组件未错误依赖Reactor Context的传递逻辑,尽量保持MVC的同步/异步模型,避免不必要的Reactor上下文操作。

  • 手动注册ContextAccessor:若项目有自定义的Micrometer Context配置导致默认Accessor未注册,可手动注册ReactorContextAccessor:

import io.micrometer.context.ContextRegistry;
import io.micrometer.reactor.context.ReactorContextAccessor;
import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;

@Component
public class ContextConfig {
    @PostConstruct
    public void registerReactorContextAccessor() {
        ContextRegistry.getInstance().registerAccessor(new ReactorContextAccessor());
    }
}
  • 清理冲突依赖:执行mvn dependency:tree查看依赖树,排查是否存在Spring Boot 2.x遗留的Reactor、Micrometer相关依赖,通过<exclusions>标签排除冲突的旧版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 17:13:11