【问题标题】:How does spring look for @EnableJms methods if I don't have class marked @EnableJms annotation?如果我没有标有 @EnableJms 注释的类,spring 如何查找 @EnableJms 方法?
【发布时间】:2018-01-29 11:08:35
【问题描述】:

我正在阅读有关如何启动 spring-jms 应用程序的官方入门文章

https://spring.io/guides/gs/messaging-jms/

@EnableJms 触发发现带有注释的方法 @JmsListener,在下面创建消息监听容器 封面。

但我的应用程序看到没有@EnableJms 注释的@JmsListener 方法。

也许其他东西会强制弹簧搜索@EnableJms 方法。我想知道。

项目结构:

听众:

@Component
public class Listener {

    @JmsListener(destination = "my_queue_new")
    public void receive(Email email){
        System.out.println(email);
    }
    @JmsListener(destination = "my_topic_new", containerFactory = "myFactory")
    public void receiveTopic(Email email){
        System.out.println(email);
    }
}

RabbitJmsApplication:

@SpringBootApplication
//@EnableJms  I've commented it especially, behaviour was not changed.
public class RabbitJmsApplication {

    public static void main(String[] args) {
        SpringApplication.run(RabbitJmsApplication.class, args);
    }

    @Bean
    public RMQConnectionFactory connectionFactory() {
        return new RMQConnectionFactory();
    }

    @Bean
    public JmsListenerContainerFactory<?> myFactory(DefaultJmsListenerContainerFactoryConfigurer configurer, ConnectionFactory connectionFactory) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        // This provides all boot's default to this factory, including the message converter
        configurer.configure(factory, connectionFactory);
        // You could still override some of Boot's default if necessary.
        factory.setPubSubDomain(true);
        return factory;
    }
}

【问题讨论】:

  • enableJms 是必需的。您是否尝试过重新构建和运行应用程序。
  • @Sangam Belose 我尝试在想法中单击构建/重建。现在我将尝试使缓存无效
  • @Sangam - 它仍在工作。如果您愿意帮助我,我可以与您分享所有资源。
  • Spring Boot 检测到 JMS 的存在并自动启用 JMS 处理。该声明仅适用于非 Spring Boot 应用程序。
  • @M. Deinum,spring如何检测JMS的存在?

标签: java spring spring-boot rabbitmq spring-jms


【解决方案1】:

感谢您的反馈。这确实有点令人困惑,我创建了an issue 来改进示例。

@EnableJms 是开始处理侦听器的框架信号,它必须是显式的,因为框架无法知道您要使用 JMS。

另一方面,Spring Boot 可以根据上下文为您做出默认决策。如果您有必要的位来创建ConnectionFactory,它会这样做。以后,如果我们检测到ConnectionFactory 可用,我们将自动启用 JMS 侦听器的处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2010-10-14
    • 1970-01-01
    相关资源
    最近更新 更多