0

我需要 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"/>

但是,如果目标名称解析为 null,则会引发以下异常:

java.lang.IllegalArgumentException: 'destinationName' must not be null

处理这种情况的最佳方法是什么?谢谢

4

1 回答 1

1

因此,问题出在您IllegalArgumentException在应用程序启动时遇到的问题。如果真的不知道你的目标是否会null,你应该做一些Java代码:

  1. 标记你<int-jms:message-driven-channel-adapter>auto-startup="false"
  2. DefaultMessageListenerContainer也为with引入单独的 bean autoStartup=false,并将其注入<int-jms:message-driven-channel-adapter>
  3. 至于destination-name它的一个属性,DefaultMessageListenerContainer您应该纠正一些代码以在应用程序启动时解析您的目标并将值(如果有)注入容器 bean。
  4. 并调用start(). <int-jms:message-driven-channel-adapter>它是一个AbstractEndpoint带有 id 的 beandsToT2

请注意,您不能提供nulldestination-name属性。当您的 AC 尝试填充 bean 属性时,它会在启动时失败。在这种情况下,将调用AbstractMessageListenerContainer#setDestinationName,然后执行 check Assert.notNull(destinationName, "'destinationName' must not be null");。但是,您可以尝试提供空字符串''而不是为属性null添加类似的 SpEL 条件。auto-startup

高温高压

于 2013-11-05T16:00:09.997 回答