如何在Spring XML中引用Bean ID作为RabbitMQ队列参数值?
解决Spring XML中引用Bean作为RabbitMQ队列参数的问题
要将ID为msg.throttle.time的Spring Bean作为RabbitMQ队列x-message-ttl的参数值,不能直接在<value>标签里写Bean ID(Spring会把它当作普通字符串处理),需要使用**Spring表达式语言(SpEL)**的#{}语法来引用Bean。
修改后的配置代码
<bean id="msg.throttle.time" class="java.lang.Long" factory-method="getMsgThrottleTime" factory-bean="ThrottleService"> </bean> <rabbit:queue name="ws.connection.disconnect.sleep" durable="true"> <rabbit:queue-arguments> <entry key="x-message-ttl" > <!-- 使用SpEL引用目标Bean --> <value type="java.lang.Long">#{msg.throttle.time}</value> </entry> <entry key="x-dead-letter-exchange" value="ws.connection.disconnect.x"/> <entry key="x-queue-type" value="quorum" /> </rabbit:queue-arguments> </rabbit:queue>
说明
#{msg.throttle.time}会让Spring自动解析并注入ID为msg.throttle.time的Bean实例,由于该Bean本身是java.lang.Long类型,完全匹配x-message-ttl参数对数据类型的要求。- 确保
ThrottleService的getMsgThrottleTime方法能正确返回Long类型的值,否则Spring会在初始化时抛出异常。
内容的提问来源于stack exchange,提问作者aditi
相关产品推荐
相关产品推荐

