首页 > 解决方案 > Spring Boot 通过外部属性禁用 @JmsListener

问题描述

我有一个应用程序,它有一个方法@JmsListener用于侦听来自远程 JMS 代理的传入消息(即本例中的 Apache ActiveMQ Artemis)。但是,现在我想禁用此方法(使用@JmsListener),但不删除它,以便我可以在没有代理的环境中重用此方法的功能,同时我可以继续在经纪人所在的环境。

有可能实现这一目标吗?如果是,如何?

标签: spring-boot

解决方案


我想我想通了。

第 1 步 禁用 jms 自动启动

我在 Spring Boot 配置中使用默认的 jms 侦听器容器工厂

@Bean(name = "jmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory() {
    DefaultJmsListenerContainerFactory factory =
            new DefaultJmsListenerContainerFactory();
    factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    factory.setSessionTransacted(true);
    factory.setConnectionFactory(cachingConnectionFactory());
    return factory;
}

所以要禁用它,我需要将配置修改为这样的东西

@Bean(name = "jmsListenerContainerFactory")
public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(
        **@Value("${spring.jms.listener.auto-startup}") boolean autoStart**) {
    DefaultJmsListenerContainerFactory factory =
            new DefaultJmsListenerContainerFactory();
    factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
    factory.setSessionTransacted(true);
    factory.setConnectionFactory(cachingConnectionFactory());
    **factory.setAutoStartup(autoStart);**
    return factory;
}

注意: ** 用于强调

第 2 步更新 application.properties/application.yml

如果使用 yml 格式,请将其添加到application.yml

spring:
  jms:
    listener:
      auto-startup: true

如果使用属性格式,请将其添加到application.properties

spring.jms.listener.auto-startup=true

step no.3运行spring boot神器

如果你想禁用 jms 然后运行你的工件

java -jar myjarfile.jar --spring.jms.listener.auto-startup=false 

这应该足以禁用 jms,但是如果您想启用 jms,那么只需执行您的工件

java -jar myjarfile.jar

或者

java -jar myjarfile.jar --spring.jms.listener.auto-startup=true *(redundant)* 

注意: ** 用于强调


推荐阅读