我有一个通过注释配置的Spring JMS应用程序,我试图在JMS侦听器启动之前向应用程序提供一些信息。之后,我想手动启动监听器。
使用以下配置:
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<div class="container">
<div class="row">
<div class="col-xs-6">
<h1>1st column</h1>
</div>
<div class="col-xs-6">
<h1>2nd column</h1>
</div>
</div>
</div>
我看到了选项:@Bean(name = "queueContainerFactory")
public JmsListenerContainerFactory<?> queue(ConnectionFactory cf) {
SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
ActiveMQConnectionFactory amqCf = (ActiveMQConnectionFactory) cf;
factory.setConnectionFactory(amqCf);
...
}
这样启动应用程序上下文并且factory.setAutoStartup(FALSE);
没有启动但我不知道如何手动启动JMS容器工厂。
@JmsListener
答案 0 :(得分:1)
您必须自动装配JmsListenerEndpointRegistry
并通过其MessageListenerContainer
获取特定id
。您可以在id
上配置@JmsListener
的位置:
/**
* The unique identifier of the container managing this endpoint.
* <p>If none is specified, an auto-generated one is provided.
* @see org.springframework.jms.config.JmsListenerEndpointRegistry#getListenerContainer(String)
*/
String id() default "";
这可能看起来像:
@JmsListener(id ="myContainer",
containerFactory="queueContainerFactory",
destination = "${destination}")
public void jmsListener(String message) {
...
}
...
@Autowired
JmsListenerEndpointRegistry jmsListenerEndpointRegistry;
...
this.jmsListenerEndpointRegistry.getListenerContainer("myContainer").start();