我需要添加application.properties
文件中提到的多个侦听器.像下面一样,
InTopics=Sample.QUT4,Sample.T05,Sample.T01,Sample.JT7
注意:这个数字可以更多或更少.
我想把它们放在一个数组中,
@Value("${InTopics}") private String[] inTopics;
但我不知道如何从数组创建多个侦听器.
目前,我正在做的一个主题如下,
@Configuration @EnableJms public class JmsConfiguration { @Value("${BrokerURL}") private String brokerURL; @Value("${BrokerUserName}") private String brokerUserName; @Value("${BrokerPassword}") private String brokerPassword; @Bean TopicConnectionFactory connectionFactory() throws JMSException { TopicConnectionFactory connectionFactory = new TopicConnectionFactory(brokerURL, brokerUserName, brokerPassword); return connectionFactory; } @Bean JmsListenerContainerFactory> jmsContainerFactory(TopicConnectionFactory connectionFactory) throws JMSException { SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory(); factory.setConnectionFactory(connectionFactory); factory.setPubSubDomain(Boolean.TRUE); return factory; } }
而我的倾听者,
@JmsListener(destination = "${SingleTopicName}", containerFactory = "jmsContainerFactory") public void receiveMessage(Message msg) { //Do Some Stuff }
有什么方法可以达到这个目的吗?
您无法使用带注释的@JmsListener
s 来执行此操作,但您可以通过JmsListenerConfigurer
按参考文档中的描述进行扩展来以编程方式注册每个侦听器.
编辑
因为您将属性作为数组注入...
@Value("${InTopics}") private String[] inTopics;
Spring将根据列表中的队列数分割列表创建一个数组.
然后,您可以迭代数组JmsListenerConfigurer.configureJmsListeners()
并为数组中的每个元素创建一个端点 - 您不需要提前知道数组的大小.
for (String inTopic : inTopics) { ... }