解决Spring boot添加了actuator导致StreamBridge未自动加载的bug

案情说明

在Spring boot项目中,如果同时依赖了spring-cloud-starter-stream-rabbit和spring-boot-start-actuator两个包,启动时可能会出现StreamBridge组件找不到的问题。如下:

shell 复制代码
***************************
APPLICATION FAILED TO START
***************************

Description:

Field bridge in com.venustech.electric.iops.alert.collector.job.writer.AnchorMapToStreamItemWriterBuilder required a bean of type 'org.springframework.cloud.stream.function.StreamBridge' that could not be found.

The injection point has the following annotations:
        - @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'org.springframework.cloud.stream.function.StreamBridge' in your configuration.

如果现象类似,着急的同学可以直接看解决方案。

初步分析

案发之前,这个服务是正常运行的,只是没有启用actuator。因此,又尝试将spring-boot-start-actuator依赖去除。果然就恢复正常了。可以断定是actuator与rabbit的包存在冲突。

解决思路

一般遇到这种情况,首先是检查版本号是否冲突,根据Spring官网的说明,版本号一致的情况下,理论上不会有这种情况,如果有那就是BUG。

案发现场的环境是Spring Boot 2.7.13和Spring Cloud 2021.0.8,这个两个版本号是符合官方要求的。那无疑是点背撞上BUG了。

之前也有过同时使用rabbit和actuator的成功案例,从未发生过类似事件。因此,尝试了从多种角度去解决问题,包括但不限于:

  • 升级到新版本。如果是小版本,还可以尝试,大版本升级,往往会导致其它更多的组件冲突问题,不能抱太大希望;
  • 把一些间接依赖改为直接依赖,如把spring-cloud-starter-stream-rabbit依赖的包都手动再依赖一次;
  • 在配置类中显示的启用类似@EnableRabbit的配置开关;
  • 问问人工智能,这两个冲突怎么办?结果这帮智障一个劲的告诉我,这不可能。。。

以上这些方式在本案中都没有办法解决问题。最终,参考了CSDN上的一篇文章找到了答案:《记录一次streamBridge could not be found的问题》

这里也要给该文章的作者点个赞,他解决问题的思路非常清晰。

确认问题原因

这个问题根本原因是SimpleFunctionRegistry类由于在运行时对应的开关配置没有开启,导致没有被正确加载。

最终的解决方案

启用打开spring.functional.enabled配置。

Properties写法:

properties 复制代码
spring.functional.enabled=true

yml写法:

ymal 复制代码
spring:
	functional:
		enabled: true

鸣谢

再次感谢《记录一次streamBridge could not be found的问题》的作者C'est

相关推荐
wangbing11251 小时前
springboot应用关闭时触发动作
java·spring boot·后端
weixin_460443564 小时前
2026年新修订《网络安全法》实施:Java私有化考试系统如何做好SBOM、漏洞治理与安全升级?
java·开发语言·在线考试系统·企业培训考试系统·宏远培训考试系统·国企培训考试系统·国产化培训系统
海鸥-w7 小时前
什么是AOP
java
Cc.Y7 小时前
Java零基础入门:可变字符串与包装类:StringBuilder、StringBuffer 与 通讯录管理系统实战
java·开发语言·python
paopaokaka_luck7 小时前
基于springboot+vue的智慧家政管理系统(AI问答、 WebSocket实时沟通、ECharts运营分析、订单规则与服务追踪)
java·javascript·spring boot·数据分析·echarts·mybatis
sm_926787057 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
阿森_dev7 小时前
2027 届毕设选题怎么选:30 个 Java 方向选题的实现难度排序
java·开发语言·spring boot·毕业设计·课程设计
Sarvartha8 小时前
Lambda 表达式和函数式接口
java·开发语言
计算机毕业设计杰瑞8 小时前
【计算机毕设精品】基于SpringBoot的一体化教务与学业质量管理系统的设计与实现,附源码_增删改查_java项目_可完美运行部署_网站项目
java·spring boot·课程设计
colinu8 小时前
C++ 异步任务与线程生命周期:`std::async`、`future`、`thread`、`jthread` 与协作式退出
java·jvm·c++