2011-07-24 10 views
0

私はコマンドラインから実行できる1つのバネバッチアプリケーションを持っています。バッチジョブのフローは、開始時にキューからメッセージを読み取り、変換してdbに書き込みます。今私は春バッチからJmsItemReaderを使用していますし、read()メソッドの中に私のロジックがあります。ここで問題になるのは、このプロセスが開始されると、キューにメッセージが存在しないことです。このシナリオでは、バッチ全体の処理を停止したいことがあります。バネバッチ2.1とJmsReader

これを春のバッチでどのように達成できますか?基本的には、JmsItemReaderを使用すると、JMSブローカにpingを送信し、メッセージを読んで一定期間スリープするとどうなりますか。今、処理するメッセージがない場合、バッチプロセスを実行したままにして、CPUを消費させる必要があるのはなぜですか。私はそれを翌日にスケジュールに従って実行したい。

おかげ

この動作がタイムアウトするスプリング-JMS

デフォルト値で提供されjmstemplateのデフォルトの設定から来る

答えて

1

は、この値を持つ

private long receiveTimeout = RECEIVE_TIMEOUT_INDEFINITE_WAIT; 

不定で、messageconsumer.receive()になります中古

次のメッセージを受信このメッセージ消費者のために。 この は、メッセージが生成されるまで、またはこの メッセージコンシューマが閉じられるまで、無期限にブロックを呼び出します。

ますので、メッセージが到着まで、receive(long timeOut)がタイムアウト、このコールブロック

に使用されますjmstemplate

<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate"> 
    (...) 
    <property name="receiveTimeout" value="someLongValueForMilliseconds" /> 
    (...) 
</bean> 

のタイムアウト値を設定する必要があります有効期限が切れる、またはこの メッセージコンシューマが閉じられています。 0のタイムアウトは期限切れではなく、 は無期限にブロックを呼び出します。

あなたが-1の値を使用している場合、コールはすぐに優れた

+0

起こります!いい説明 – javauser2011

関連する問題