Ich verwende CharacterStreamReadingMessageSource
in einer Feder Integrationsfluss:CharacterStreamReadingMessageSource.stdin() und EOF
IntegrationFlows.from(CharacterStreamReadingMessageSource.stdin())
Es funktioniert. Das Problem ist, dass, wenn ich Rohr eine Datei auf den Prozess:
cat file | java -jar app.jar
oder
java -jar app.jar < file
sobald die Datei gelesen wurde, wird der EOF nicht propagiert, die stdin noch aktiv ist, und der Prozess Endet nicht. Gibt es etwas, was ich tun kann, damit es sich so verhält? Die manuelle Eingabe von ctrl-Z
in der Befehlszeile funktioniert wie erwartet und schließt die Anwendung (Spring Boot App, kein Web).
Ich wollte nur hinzufügen, dass diese Lösung funktioniert, aber die Menschen sollten sich bewusst sein, dass in komplexeren Abläufen Nachrichten noch verarbeitet und durch den Fluss gehen können, die verloren gehen, wenn der Kontext geschlossen und alle Beans zerstört werden . Nicht sicher, wie man das anmutig tut, um diese Art von Situationen zu vermeiden. Aus diesem Grund habe ich die 'CharacterStreamReadingMessageSource' (mit einem Fix) nicht verwendet, sondern meine eigene 'StdinReader'-Klasse erstellt, die von einer Klasse aufgerufen wird, die' CommandLineRunner' implementiert und 'ThreadPoolExecutor' autowired, um Executor Shutdown zu erlauben . – xbranko