V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iv8d
V2EX  ›  Java

springboot 引入依赖的自动配置

  •  
  •   iv8d · 5 天前 · 1345 次点击

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

    10 条回复    2025-04-08 21:55:10 +08:00
    ccw4wcc
        1
    ccw4wcc  
       5 天前
    spring.rabbitmq.listener.direct.auto-startup= false
    spring.rabbitmq.listener.simple.auto-startup= false 试试行不行,不行的话往 Springboot 健康检测那个方向去搜索一下
    BigTomato
        2
    BigTomato  
       5 天前
    @Lazy
    iv8d
        3
    iv8d  
    OP
       5 天前
    @ccw4wcc 试过不行,屏蔽了健康检测确实就不自动连了,谢谢大佬。有代码方便可以自动配置得么。
    miaotaizi
        4
    miaotaizi  
       5 天前
    Conditional 相关的注解行吗?
    ccw4wcc
        5
    ccw4wcc  
       4 天前
    @iv8d #3 是不是因为引入了 springboot Actuator 这个,这个启动的时候会去检测所有中间件?所以你把健康检测屏蔽了以后就可以了?
    cxhello
        6
    cxhello  
       4 天前
    @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
        7
    lyqiang  
       4 天前
    消费队列配置 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
        8
    lyqiang  
       4 天前
    @lyqiang 如果只是控制消费的话,可以试试这个
    iv8d
        9
    iv8d  
    OP
       3 天前 via Android
    @cxhello 这会导致注入的类找不到而导致启动失败
    iv8d
        10
    iv8d  
    OP
       3 天前 via Android
    @ccw4wcc 应该是这样的,大佬懂得真多
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2907 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:33 · PVG 14:33 · LAX 23:33 · JFK 02:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.