我需要Spring Integration配置来处理应用程序将在其上接收消息的可变数量的队列的情况。
尝试了以下配置:
<int-jms:message-driven-channel-adapter id="dsToT2"
destination-name="#{tConfigurer.getDsToTQueues().values().toArray().length>2?
dsConfigurer.getDsToTQueues().values().toArray()[2]:null}"
connection-factory="connectionFactory"
channel="ackToTChannel"/>
但是,如果destination-name解析为null,则抛出以下异常:
java.lang.IllegalArgumentException: 'destinationName' must not be null
处理此方案的最佳方法是什么? 感谢
答案 0 :(得分:1)
因此,问题在于您在应用程序启动时获得IllegalArgumentException
。
如果真的不知道你的排序是否为null
,那么你应该做一些Java代码:
<int-jms:message-driven-channel-adapter>
auto-startup="false"
DefaultMessageListenerContainer
引入autoStartup=false
的单独bean,并将其注入<int-jms:message-driven-channel-adapter>
destination-name
是DefaultMessageListenerContainer
的属性,您应该在应用程序启动时使用一些代码来解析目标,并将值(如果有的话)注入容器bean。start()
<int-jms:message-driven-channel-adapter>
。它是一个标识为AbstractEndpoint
dsToT2
bean
醇>
注意,您无法向null
属性提供destination-name
。当您尝试填充bean属性时,AC将在启动时失败。在这种情况下,将调用AbstractMessageListenerContainer#setDestinationName
,然后进行检查
Assert.notNull(destinationName, "'destinationName' must not be null");
。
但是,您可以尝试提供空字符串''
而不是null
,并为auto-startup
属性添加类似的SpEL条件。
HTH