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 のプロパティ ホストをこの値に設定してください」と伝えたいのです。