Ich erstelle eine Befehlszeilen-Java-Anwendung mithilfe von Spring Boot, damit es schnell funktioniert.So beenden Sie eine Spring Boot-Befehlszeilenanwendung
Die Anwendung lädt verschiedene Dateitypen (z. B. CSV) und lädt sie in eine Cassandra-Datenbank. Es verwendet KEINE Web-Komponenten, es ist keine Web-Anwendung.
Das Problem, das ich habe, ist die Anwendung zu stoppen, wenn die Arbeit erledigt ist. Ich verwende die Spring CommandLineRunner-Schnittstelle mit einer @Component
, um die Aufgaben auszuführen, wie unten gezeigt, aber wenn die Arbeit abgeschlossen ist, hört die Anwendung nicht auf, sie läuft aus irgendeinem Grund weiter und ich finde keine Möglichkeit, sie zu stoppen.
@Component
public class OneTimeRunner implements CommandLineRunner {
@Autowired
private CassandraOperations cassandra;
@Autowired
private ConfigurableApplicationContext context;
@Override
public void run(String... args) throws Exception {
// do some work here and then quit
context.close();
}
}
UPDATE: Das Problem scheint spring-cassandra
, zu sein, da es nichts anderes im Projekt ist. Wer weiß, warum im Hintergrund Threads laufen, die verhindern, dass die Anwendung beendet wird?
UPDATE: Das Problem verschwand durch die Aktualisierung auf die neueste Springboot-Version.
Irgendeine Lösung zu diesem? Es passiert mit normalen Spring Boot (ohne Cassandra) – ACV
@ACV Nein, ich lebe nur damit. Ich habe gelernt, dass einige Federmodule eigene Fäden spawnen, z. Cassandra hat einen Thread-Pool für Verbindungen oder RabbitMQ, wenn Sie Listener-Container verwenden. Nach dem Aufruf von 'context.close()' dauert das Herunterfahren einige Zeit, um die Anwendung zu beenden. – ESala
Siehe meine Antwort unter – ACV