假设,我的 Spring xml 中有以下 bean:
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="${host}"/>
<property name="port" value="${mq.port}"/>
</bean>
<bean id="jmsQueueConnectionFactory"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="mqConnectionFactory"/>
</bean>
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory"/>
</bean>
我需要向不同的主机发送消息,但我不想定义多个连接工厂 bean。
指定这样的主机会很棒:
class A {
@Autowired(host="host1")
private JmsTemplate jmsTemplate;
}
class B {
@Autowired(host="host2")
private JmsTemplate jmsTemplate;
}
更新:
我可以创建以下配置:
<bean id="mqConnectionFactory1" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="${host1}"/>
<property name="port" value="${mq.port}"/>
</bean>
<bean id="mqConnectionFactory2" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="${host2}"/>
<property name="port" value="${mq.port}"/>
</bean>
<bean id="jmsQueueConnectionFactory1"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="mqConnectionFactory1"/>
</bean>
<bean id="jmsQueueConnectionFactory2"
class="org.springframework.jms.connection.SingleConnectionFactory">
<property name="targetConnectionFactory" ref="mqConnectionFactory2"/>
</bean>
<bean id="jmsTemplate1" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory1"/>
</bean>
<bean id="jmsTemplate2" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsQueueConnectionFactory2"/>
</bean>
然后:
class A {
@Resource("jmsTemplate1")
private JmsTemplate jmsTemplate;
}
class B {
@Resource("jmsTemplate2")
private JmsTemplate jmsTemplate;
}
这似乎是错误和复杂的。问题是减少此配置并将主机作为参数传递。换句话说,我想告诉 Spring:“创建 jmsTemplate 并将 connectionFactory 的属性 host 设置为这个值。”