Sto costruendo un'applicazione java della riga di comando utilizzando Spring Boot per farlo funzionare rapidamente.Come chiudere un'applicazione di riga di comando Spring Boot
L'applicazione carica diversi tipi di file (ad esempio CSV) e li carica in un database Cassandra. NON usa componenti web, non è un'applicazione web.
Il problema che sto avendo è quello di interrompere l'applicazione quando il lavoro è finito. Sto usando l'interfaccia Spring CommandLineRunner con un @Component
per eseguire le attività, come mostrato di seguito, ma quando il lavoro è completato l'applicazione non si ferma, continua a funzionare per qualche motivo e non riesco a trovare un modo per fermarlo.
@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: il problema sembra essere spring-cassandra
, dal momento che non c'è niente altro nel progetto. Qualcuno sa perché mantiene i thread in esecuzione in background che impediscono l'arresto dell'applicazione?
UPDATE: il problema è scomparso con l'aggiornamento all'ultima versione di avvio di primavera.
Qualsiasi soluzione a questo? Succede con il normale avvio a molla (senza cassandra) – ACV
@ ACV no, io vivo solo con esso. Ho appreso che alcuni moduli molla generano i propri thread, ad es. Cassandra dispone di un pool di thread per le connessioni o RabbitMQ quando si utilizzano contenitori listener. Questi richiedono del tempo per spegnersi dopo aver chiamato 'context.close()' per fermare l'applicazione. – ESala
Vedere la risposta sotto – ACV