2016-09-20 1 views
1

Ich habe eine Spring JMS-Anwendung über Annotationen konfiguriert und ich versuche, einige Informationen für die Anwendung bereitzustellen, bevor die JMS-Listener starten. Danach möchte ich die Listener manuell starten.JMS container fabrik manueller start

Mit folgenden Konfiguration:

@Bean(name = "queueContainerFactory") 
public JmsListenerContainerFactory<?> queue(ConnectionFactory cf) { 
     SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); 
     ActiveMQConnectionFactory amqCf = (ActiveMQConnectionFactory) cf; 
     factory.setConnectionFactory(amqCf); 
    ... 
} 

ich die Möglichkeit sah: factory.setAutoStartup(FALSE);

Damit der Anwendungskontext beginnt und die @JmsListener nicht gestartet ist, aber ich weiß nicht, wie die JMS-Container Fabrik zu starten manuell.

@JmsListener(containerFactory="queueContainerFactory", destination = "${destination}") 
    public void jmsListener(String message) { 
... 
} 

Antwort

1

Sie haben JmsListenerEndpointRegistry autowire und die besondere MessageListenerContainer durch seine id zu erhalten. Wo dieser id können Sie auf der @JmsListener konfigurieren:

/** 
* 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 ""; 

, die wie folgt aussehen könnte:

@JmsListener(id ="myContainer", 
      containerFactory="queueContainerFactory", 
      destination = "${destination}") 
    public void jmsListener(String message) { 
... 
} 

... 

@Autowired 
JmsListenerEndpointRegistry jmsListenerEndpointRegistry; 

... 

this.jmsListenerEndpointRegistry.getListenerContainer("myContainer").start(); 
+2

Oder Sie können 'start()' die Registrierung und es wird alle registrierten Container starten. –