如何禁用Spring Cloud Stream自动注册Camunda相关MessageChannel与MessageSource?
问题描述
我们的Demo项目依赖如下:
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-rabbit</artifactId> </dependency> <dependency> <groupId>org.camunda.bpm.springboot</groupId> <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> </dependencies>
启动项目后,日志显示Spring Integration自动注册了Camunda相关组件:
INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel camundaBpmVersion_integrationflow.channel#0 INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel errorChannel INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel camundaBpmVersion-out-0 INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageChannel nullChannel INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageHandler camundaBpmVersion_integrationflow.org.springframework.integration.config.ConsumerEndpointFactoryBean#0 INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageHandler _org.springframework.integration.errorLogger INFO 75175 --- [ main] o.s.i.monitor.IntegrationMBeanExporter : Registering MessageSource camundaBpmVersion-out-0_spca
如何禁用针对Camunda的自动绑定及MessageSource的自动注册?目前发现添加如下空Consumer可缓解该问题:
@Bean fun test() = Consumer<Any> {}
解决方案
方法1:禁用Spring Cloud Stream绑定自动配置
直接在配置文件中排除Spring Cloud Stream的绑定服务配置类,彻底关闭自动绑定逻辑:
spring.autoconfigure.exclude=org.springframework.cloud.stream.config.BindingServiceConfiguration
注意:此方法会禁用所有Spring Cloud Stream的自动绑定,若项目中还有其他需要使用的Stream通道,不建议使用。
方法2:忽略Camunda相关通道
如果需要保留其他Stream绑定,可自定义绑定配置,忽略Camunda相关的通道名称:
@Configuration public class StreamCustomConfig { @Bean public BindingServiceProperties bindingServiceProperties() { BindingServiceProperties properties = new BindingServiceProperties(); // 忽略所有以camundaBpmVersion开头的通道 properties.setIgnoredChannels(Collections.singletonList("camundaBpmVersion*")); return properties; } }
这样Spring Cloud Stream不会为匹配前缀的通道创建绑定和相关组件。
方法3:明确指定需要绑定的通道
通过@EnableBinding注解仅绑定项目中需要的自定义通道,避免自动检测绑定Camunda组件:
@EnableBinding(CustomStreamChannels.class) public class StreamBindingConfig { public interface CustomStreamChannels { @Input("business-input") SubscribableChannel businessInput(); @Output("business-output") MessageChannel businessOutput(); } }
此方法精准控制绑定范围,不会触发Camunda相关组件的自动绑定。
方法4:禁用Spring Integration MBean导出(仅隐藏日志)
如果只是不想看到注册日志,且无需Integration的MBean监控,可关闭MBean导出:
# 关闭全局JMX spring.jmx.enabled=false # 或仅关闭Spring Integration的JMX导出 spring.integration.jmx.enabled=false
注意:此方法只是隐藏日志输出,并未真正禁用组件注册。
内容的提问来源于stack exchange,提问作者Darkin Rall
相关产品推荐
相关产品推荐

