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

Spring Cloud Stream使用@ServiceActivator启动报循环引用异常咨询

异常产生原因

这个异常并非真正的循环依赖导致,是Spring Integration JMX导出器(IntegrationMBeanExporter)的初始化时序bug触发了Spring单例Bean的创建检测机制:

  1. 你通过@ServiceActivator注解标注的错误处理方法,会在容器启动后期由MessagingAnnotationPostProcessor扫描,动态生成名为profileListener.handleErrors.serviceActivator的ServiceActivator端点Bean
  2. 该Bean在初始化执行后置处理流程时,IntegrationMBeanExporter作为BeanPostProcessor会尝试为当前端点注册JMX监控指标,此时Bean还未完成初始化,仍处于Spring标记的"正在创建"状态
  3. IntegrationMBeanExporter在注册监控逻辑中主动调用getBean()尝试获取当前正在创建的Bean实例,直接触发了Spring单例注册的循环引用检测,抛出BeanCurrentlyInCreationException
  4. 这个异常发生在JMX注册的非核心流程,会被Spring内部捕获处理,因此不会阻断应用正常启动,只会打印错误日志。

另外你贴的错误处理代码存在笔误:方法入参名定义为in,日志打印时却调用了em.toString(),实际运行时会出现变量找不到的错误,需要同步修正。

解决方案

任选以下一种方式即可消除该错误日志:

  • 精准关闭Spring Integration的JMX自动注册,在配置文件中添加如下配置:
spring:
  integration:
    jmx:
      enabled: false

该配置仅关闭Spring Integration组件的MBean注册能力,不会影响Spring其他模块的JMX功能,是成本最低的修复方案。

  • 升级Spring Integration版本到5.5.14及以上,该初始化时序bug已经在后续小版本中完成修复,IntegrationMBeanExporter不会在Bean未完成初始化时提前拉取实例。
  • 改用Java Config手动注册errorChannel的消息处理端点,替代@ServiceActivator注解声明的方式,避开注解扫描注册阶段的时序冲突。

注意:你配置的error-channel-enabled: true参数本身没有问题,不是触发该异常的原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 06:30:49