Spring 4.1 @JmsListener Konfiguration
Ich würde gerne die neuen Beschriftungen und features in Spring 4.1 für eine Anwendung benötigt, die eine JMS-listener.
Ich habe sorgfältig Lesen Sie die Hinweise in der Spring 4.1 JMS Verbesserungen posten aber ich weiterhin zu übersehen, die Beziehung zwischen @JmsListener
und vielleicht die DestinationResolver
und wie würde ich das setup der Anwendung zu zeigen die richtige Destination
oder Endpoint
.
Hier ist die vorgeschlagene Verwendung von @JmsListener
@Component
public class MyService {
@JmsListener(containerFactory = "myContainerFactory", destination = "myQueue")
public void processOrder(String data) { ... }
}
Nun, ich kann nicht verwenden Sie diese in meinem eigentlichen code, da die "myQueue" muss gelesen werden aus einer Konfigurationsdatei mit Environment.getProperty()
.
Kann ich setup eine entsprechende myContainerFactory mit einem DestinationResolver
aber meistens, es scheint, Sie würden nur verwenden DynamicDestinationResolver
wenn Sie nicht brauchen, JNDI-lookup einer Warteschlange in einem app-server, und nicht tun müssen, einige benutzerdefinierte Antwort-Logik. Ich bin einfach nur versuchen zu verstehen, wie der Frühling will mir bitte den Namen der Warteschlange in einer parametrisierten Mode mit der @JmsListener
annotation.
Weiter unten auf der blog-post, ich finde einen Verweis auf diese Configurer:
@Configuration
@EnableJms
public class AppConfig implements JmsListenerConfigurer {
@Override
public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {
registrar.setDefaultContainerFactory(defaultContainerFactory());
SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
endpoint.setDestination("anotherQueue");
endpoint.setMessageListener(message -> {
//processing
});
registrar.registerEndpoint(endpoint);
}
Nun, das macht eine gewisse Menge an Gefühl und ich konnte sehen, wo das würde mir erlauben, ein Ziel einstellen zur Laufzeit aus einer externen string, aber das scheint im Konflikt mit @JmsListener
wie es zu sein scheint überschreiben der annotation zu Gunsten von endpoint.setMessageListener
im code oben.
Irgendwelche Tipps geben die entsprechenden queue-Namen mit @JmsListener
?
destination="${name.of.your.property}"
.Ich würde lieber nicht verwenden
PropertyPlaceHolderConfiguration
zu Gunsten von Environment.getProperty
aber klar kann ich nicht nehmen, die route als parameter an eine annotation.Tatsächlich werden Sie eine
PropertySourcePlaceHolderConfigurer
was im Grunde das gleiche wie Environment.getProperty
tut (es berät alle PropertySource
s. Können Sie erläutern, warum Sie lieber die Environment.getProperty
über den Platzhalter, in diesem Fall?Und warum sollte ein
@PropertySource
würde nicht funktionieren mit einem Platzhalter? Es funktioniert auf die gleiche. Der einzige Unterschied ist, dass Sie brauchen, um eine PropertySourcesPlaceHolderConfigurer
. Also, die Tatsache, mit einem Platzhalter, bedeutet nicht, dass Sie nicht verwenden können @PropertySource
mehr.Ich bin +1 mit @M. Deinum hier und wäre interessiert zu verstehen, was das Problem mit Platzhalter.
InformationsquelleAutor TemarV | 2014-09-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie konnte schließlich nicht, dass gerade jetzt, aber es ist ein wenig verworren. Sie können eine benutzerdefinierte
JmsListenerEndpointRegistry
mitJmsListenerConfigurer
werden und überschreiben dann die registerListenerContainer Methode, so etwas wie
Aber wir besser machen könnten. Bitte sehen Sie/vote für SPR-12280
InformationsquelleAutor Stephane Nicoll
Beachten Sie auch, dass je nach Anwendungsfall können Sie bereits parametrieren mittels properties-Datei pro Umwelt und PropertySourcesPlaceholderConfigurer
Als pro https://jira.spring.io/browse/SPR-12289
InformationsquelleAutor GameSalutes
Bei Menschen mit
@JmsListener
mit spring boot, Sie haben keinen so konfigurieren SiePropertySourcesPlaceholderConfigurer
. Es funktioniert aus der boxBeispiel:
Klasse
Anwendung.Eigenschaften
Spring-boot-Ausgabe
Dies beweist, dass sich @JmsListener ist in der Lage, um die Abholung Eigenschaft Werte von der Anwendung.Eigenschaften, ohne dort eine explizite
PropertySourcesPlaceholderConfigurer
Ich hoffe, das hilft!
InformationsquelleAutor shahshi15