springboot 引入依赖的自动配置

151 天前
 iv8d

依赖 spring-boot-starter-amqp ,代码里有 @Resource 等注入了 RabbitAdmin 等,如何让启动时不要自动连接 mq 服务呢。等需要的时候再启动。这样也可以不用改动太多代码。

2203 次点击
所在节点    Java
10 条回复
ccw4wcc
151 天前
spring.rabbitmq.listener.direct.auto-startup= false
spring.rabbitmq.listener.simple.auto-startup= false 试试行不行,不行的话往 Springboot 健康检测那个方向去搜索一下
BigTomato
151 天前
@Lazy
iv8d
151 天前
@ccw4wcc 试过不行,屏蔽了健康检测确实就不自动连了,谢谢大佬。有代码方便可以自动配置得么。
miaotaizi
151 天前
Conditional 相关的注解行吗?
ccw4wcc
151 天前
@iv8d #3 是不是因为引入了 springboot Actuator 这个,这个启动的时候会去检测所有中间件?所以你把健康检测屏蔽了以后就可以了?
cxhello
151 天前
@iv8d 可以试试这两种方案

@Bean
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
rabbitAdmin.setAutoStartup(false);
return rabbitAdmin;
}


@Bean
@ConditionalOnExpression("'${rabbitmq.admin.enabled}' == 'true'")
public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory) {
return new RabbitAdmin(connectionFactory);
}
lyqiang
150 天前
消费队列配置 autoStartup = false
@RabbitListener(queues = {"xxx.yyy.zzz"},containerFactory = "abcContainerFactory", autoStartup = "false")
public void consumer(Message message) {
//...
}


在某个地方开启消费
Collection<MessageListenerContainer> listenerContainers = rabbitListenerEndpointRegistry.getListenerContainers();
for (MessageListenerContainer listener : listenerContainers) {
if (!listener.isAutoStartup() && !listener.isRunning()) {
String[] queueNames = ((SimpleMessageListenerContainer) listener).getQueueNames();
listener.start();
log.info("queueName:{}, isRunning:{}", queueNames, listener.isRunning());
}
}
lyqiang
150 天前
@lyqiang 如果只是控制消费的话,可以试试这个
iv8d
150 天前
@cxhello 这会导致注入的类找不到而导致启动失败
iv8d
150 天前
@ccw4wcc 应该是这样的,大佬懂得真多

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1123715

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX