Spring环境下使用多个JMS队列时找不到JMS队列的问题

本文介绍了一个应用在连接两个不同JMS队列时遇到的问题及解决方案。问题源于配置文件中的jndiTemplate名称冲突,通过为不同的配置文件指定唯一的jndiTemplate名称解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一个应用,连接两个不同的JMS队列,实际运行时抛出如下异常:

 

 

org.springframework.jms.UncategorizedJmsException: Uncategorized exception occured during JMS processing; nested exception is weblogic.jms.common.JMSException:
could not find Server JmsManaged_7030; nested exception is weblogic.jms.common.JMSException: could not find Server JmsManaged_7030
上Weblogic控制台查看运行状态,发现队列配置正确且正常运行,排除配置问题。
分析程序,在JMS配置文件JmsA.xml中发现如下内容:
    <bean id="jmsConnectionFactoryForA" class="org.springframework.jndi.JndiObjectFactoryBean">
         <property name="jndiTemplate" ref="jndiTemplate"/>  
    </bean>  
    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
 
       ......
  <prop key="java.naming.provider.url">${jmsUrlForA}</prop>
        ......
    </bean> 
    
在JMS配置文件JmsB.xml中发现如下内容:
    <bean id="jmsConnectionFactoryForB" class="org.springframework.jndi.JndiObjectFactoryBean">
         <property name="jndiTemplate" ref="jndiTemplate"/>  
    </bean>  
    <bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate"> 
        ......
        <prop key="java.naming.provider.url">${jmsUrlForB}</prop>
        ......
    </bean> 
问题就发生在jndiTemplate上。由于默认配置Spring按名字匹配,而系统中定义了不止一个jndiTemplate,故无法找到匹配的jndiTemplate,发生问题。将JmsA.xml中将jndiTemplate改为jndiTemplateForA,将JmsB.xml中则改为jndiTemplateForB,并相应修改引用的地方,重新测试OK。
建议:给bean的id命名时要避免重名,通常可以采用添加后缀的形式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值