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"/>

ただし、destination-name が null に解決されると、次の例外がスローされます。

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

このシナリオを処理する最善の方法は何ですか? ありがとう

4

1 に答える 1

1

IllegalArgumentExceptionしたがって、アプリケーションの起動時に発生する問題はここにあります。あなたのdetinationがそうであるかどうか本当にわからない場合はnull、いくつかのJavaコードを実行する必要があります:

  1. <int-jms:message-driven-channel-adapter>であなたをマークauto-startup="false"
  2. 別の Bean for DefaultMessageListenerContainerwithautoStartup=falseも導入し、それを<int-jms:message-driven-channel-adapter>
  3. destination-nameそのプロパティである限り、DefaultMessageListenerContainerアプリケーションの起動時に目的地を解決し、値 (存在する場合) をコンテナー Bean に注入するために、いくつかのコードを修正する必要があります。
  4. start()との呼び出し<int-jms:message-driven-channel-adapter>。ID付きのAbstractEndpointBeanですdsToT2

属性には指定できないことnullに注意してください。destination-nameAC は、Bean のプロパティを入力しようとすると、起動時に失敗します。この場合、 が呼び出されAbstractMessageListenerContainer#setDestinationName、チェックが実行され Assert.notNull(destinationName, "'destinationName' must not be null");ます。ただし、''代わりに空の文字列をnull指定して、同様の SpEL 条件をauto-startup属性に追加することもできます。

HTH

于 2013-11-05T16:00:09.997 に答える