【发布时间】:2015-10-08 05:34:01
【问题描述】:
我正在使用 JNDI 查找 来获取 tomcat 服务器上 Websphere MQ 代理的连接对象。我正在使用 JmsTemplate 将消息发送到 WMQ 代理上的队列并试图避免基于 Spring Xml 的配置,因此我配置了 Spring boot 的 application.properties 文件以指定 JNDI 查找 name.below 是 application.properties 文件中的属性。
spring.jms.jndi-name= java:comp/env/XXXX
我正在使用 Spring bean 来定义 JmsTemplate,下面是它的代码。
@Configuration
public class JmsMessageTemplateBean {
//@Value("${spring.jms.jndi-name}")
//private ConnectionFactory connectionFactory;
@Bean
public JmsTemplate jmsTemplate() throws Exception{
JmsTemplate jmsMessagingTemplate = new JmsTemplate();
jmsMessagingTemplate.setDefaultDestinationName("Some Queue");
jmsMessagingTemplate.setConnectionFactory(connectionFactory);
return jmsMessagingTemplate;
}
}
我有几个问题:
1.如何从 application.properties 文件中读取 JNDI 属性,并将 Connection 对象设置为上述 bean 中的 Jms 模板。
2.我观察到 JNDI 查找 中的连接对象是MQQueueConnectionFactory,而我研究过的JmsTemplate 支持javax.jms.ConnectionFactory 对象。有没有办法将MQQueueConnectionfactory 对象转换为javax.jms.Connectionfactory。
感谢您的回答。
【问题讨论】:
-
你正在让它变得复杂。删除您的 bean,您已经获得了带有 Spring Boots 自动配置的
JmsTemplate。MQQueueConnectionFactory是ConnectionFactory。 -
@M. Deinum 感谢您的回复。使用 Spring 的自动启动配置,我得到了 JmsTemplate,但它的连接工厂默认查看 localhost 代理。如何配置 JmsTemplate 以使用 application.properties 文件中指定的 spring.jms.jndi-name。
-
如果您确实指定了应该用于查找的属性。还要确保你的类路径中没有像 activemq 这样的东西。您必须使用 Spring Boot 1.2 或更高版本才能正常工作。
标签: java spring spring-boot ibm-mq