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

Spring响应式环境中首个Mono订阅未执行问题排查

问题原因分析

以下是几种可能导致第一个Mono回调不执行的原因:

  • 目标授权客户端不存在
    ReactiveOAuth2AuthorizedClientService.loadAuthorizedClient的核心逻辑是加载已完成授权的客户端记录。如果MYCLIENTID和MYPRINCIPALNAME组合对应的授权记录不存在,这个Mono会直接进入完成状态(onComplete),不会触发onNext回调——也就是你写的打印逻辑根本不会被执行。而Mono.just是直接生成一个包含指定元素的Mono,必然会触发onNext,所以第二个打印正常。

  • 未订阅完整的信号回调
    你只给第一个Mono注册了onNext的回调,但忽略了onError和onComplete。如果第一个Mono没有元素输出(比如找不到记录),只会走onComplete;如果是执行出错,会走onError,这两种情况都不会触发你的打印。可以修改订阅代码排查:

    oAuth2AuthorizedClientService.loadAuthorizedClient(MYCLIENTID, MYPRINCIPALNAME)
            .subscribe(
                s -> System.out.println("FIRST MONO EXECUTED"),
                err -> System.out.println("加载失败: " + err.getMessage()),
                () -> System.out.println("Mono执行完成,无数据返回")
            );
    

    运行后就能明确是无数据还是执行出错。

  • OAuth2上下文或Bean配置异常
    如果ReactiveOAuth2AuthorizedClientService的Bean配置有误(比如没正确关联存储授权数据的数据源),或者当前执行环境缺少必要的OAuth2上下文信息,可能导致loadAuthorizedClient逻辑静默失败或挂起。这种情况一般会触发onError,但因为你没订阅错误回调,所以看不到任何反馈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:25:35