私は春の統合の流れでCharacterStreamReadingMessageSource
を使用しています:CharacterStreamReadingMessageSource.stdin()とEOF
IntegrationFlows.from(CharacterStreamReadingMessageSource.stdin())
それは動作します。問題は、Iパイププロセスへのファイルの場合:
cat file | java -jar app.jar
または
java -jar app.jar < file
ファイルが読み込まれた後、EOFは、標準入力がまだアクティブで伝播されません
、およびプロセス終了しません。それをそうするために私ができることはありますか?手動でコマンドラインにctrl-Z
と入力すると、アプリケーションが終了します(Springブートアプリケーション、Webはありません)。
このソリューションが機能することを追加したければ、より複雑なフローではまだメッセージが処理され、フローが処理されてコンテキストが閉じられ、すべてのBeanが破棄される。このような状況を避けるために、これを正常に実行する方法がわかりません。そのため、私は 'CharacterStreamReadingMessageSource'(修正あり)を使わずに済みましたが、' CommandLineRunner'を実装するクラスから呼び出された自分自身の 'StdinReader'クラスを作成し、' ThreadPoolExecutor'をautowiredにしてエグゼキュータのシャットダウンを許可しました。 – xbranko