SpringBootTest无Web环境结合Togglz报错及Actuator关联问题排查
问题原因分析
核心冲突:Actuator自动配置与Togglz Bean加载顺序不匹配
当你引入spring-boot-starter-actuator且使用无Web环境的@SpringBootTest时,Actuator的自动配置会先于Togglz完成初始化,导致依赖FeatureManager的Actuator端点提前尝试获取这个Bean,但此时Togglz还没完成核心Bean的注册,直接抛出找不到的异常。
具体拆解不同场景的差异原因
- 无Web+Actuator=报错:Togglz在无Web环境下的核心配置类
TogglzAutoConfiguration加载优先级低于Actuator的EndpointAutoConfiguration等类。Actuator初始化相关端点(比如Togglz集成的FeatureEndpoint)时,会直接依赖FeatureManager,但这个Bean还未被创建,因此触发异常。 - 开启Web环境=正常:Web环境下,Togglz的
TogglzWebAutoConfiguration会被激活,该配置类的加载优先级高于Actuator的端点配置类,能确保FeatureManager在端点初始化前就完成注册。 - 移除Actuator=正常:去掉Actuator后,不会触发那些依赖
FeatureManager的端点初始化逻辑,Togglz的自动配置可以顺利完成FeatureManager的注册,自然不会报错。
可选临时修复方案
- 在测试类中手动指定加载Togglz的配置类,确保优先初始化:
@SpringBootTest(classes = {TogglzAutoConfiguration.class, YourFeatureConfig.class}) class YourServiceTest { // 测试代码 } - 或者在测试中排除Actuator的自动配置类:
@SpringBootTest(exclude = {EndpointAutoConfiguration.class}) class YourServiceTest { // 测试代码 }
内容的提问来源于stack exchange,提问作者Georgii Lvov
相关产品推荐
相关产品推荐

