我需要添加application.properties文件中提到的多个侦听器。像下面一样
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 }
我有什么办法可以做到这一点?
您无法使用带注释的@JmsListeners 进行此操作,但可以通过扩展JmsListenerConfigurer(如参考文档中所述)以编程方式注册每个侦听器。
@JmsListener
JmsListenerConfigurer
编辑
由于您将属性作为数组注入…
Spring将拆分列表,并根据列表中的队列数创建一个数组。
然后,您可以遍历数组JmsListenerConfigurer.configureJmsListeners()并为数组中的每个元素创建一个端点- 您无需事先知道数组的大小。
JmsListenerConfigurer.configureJmsListeners()
for (String inTopic : inTopics) { ... }