I want to be able to set the @JMSlistener destination from an application.properties
my code looks like this
@Service
public class ListenerService {
private Logger log = Logger.getLogger(ListenerService.class);
@Autowired
QueueProperties queueProperties;
public ListenerService(QueueProperties queueProperties) {
this.queueProperties = queueProperties;
}
@JmsListener(destination = queueProperties.getQueueName() )
public void listenQueue(String requestJSON) throws JMSException {
log.info("Received " + requestJSON);
}
}
but when building I get
Error:(25, 60) java: element value must be a constant expression
destination provides various strategies for managing JMS destinations, such as providing a service locator for destinations stored in JNDI. The package org. springframework. jms. annotation provides the necessary infrastructure to support annotation-driven listener endpoints using @JmsListener .
The default method for sending the message is JmsTemplate. send(). It has two key parameters of which, the first parameter is the JMS destination and the second parameter is an implementation of MessageCreator. The JmsTemplate uses the MessageCreator's callback method createMessage() for constructing the message.
You can't reference a field within the current bean, but you can reference another bean in the application context using a SpEL expression...
@SpringBootApplication
public class So49368515Application {
public static void main(String[] args) {
SpringApplication.run(So49368515Application.class, args);
}
@Bean
public ApplicationRunner runner(JmsTemplate template, Foo foo) {
return args -> template.convertAndSend(foo.getDestination(), "test");
}
@JmsListener(destination = "#{@foo.destination}")
public void listen(Message in) {
System.out.println(in);
}
@Bean
public Foo foo() {
return new Foo();
}
public class Foo {
public String getDestination() {
return "foo";
}
}
}
You can also use property placeholders ${...}
.
Using property placeholder is much easier.
@JmsListener(destination = "${mq.queue}")
public void onMessage(Message data) {
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With