1
我在彈簧集成流量使用CharacterStreamReadingMessageSource
:CharacterStreamReadingMessageSource.stdin()和EOF
IntegrationFlows.from(CharacterStreamReadingMessageSource.stdin())
它的工作原理。問題是,如果我管一個文件的過程:
cat file | java -jar app.jar
或
java -jar app.jar < file
一旦該文件已被讀取時,EOF不會傳播,標準輸入仍處於活動狀態,並且過程並沒有結束。我能做些什麼來使其表現如此?在命令行上手動輸入ctrl-Z
按預期工作,關閉應用程序(Spring啓動應用程序,無網絡)。
只是想補充一點,這個解決方案的工作原理,但是人們應該知道,在更復雜的流程中,可能還有消息正在處理,並且會在消息流被關閉並且所有的bean被銷燬時丟失。不知道如何優雅地避免這種情況。因此,我最終沒有使用'CharacterStreamReadingMessageSource'(有一個修復),但創建了自己的'StdinReader'類,它從實現CommandLineRunner的類中調用,並且具有自動裝配的ThreadPoolExecutor以允許執行程序關閉。 – xbranko