Solución:
Encontré una solución. Puedes usar esto:
public static void main(String[] args) {
SpringApplication.run(RsscollectorApplication.class, args).close();
System.out.println("done");
}
Solo usa .close()
en marcha.
La respuesta depende de qué es lo que todavía funciona. Probablemente pueda averiguarlo con un volcado de hilo (por ejemplo, usando jstack). Pero si es algo que fue iniciado por Spring, debería poder usar ConfigurableApplicationContext.close()
para detener la aplicación en su método main () (o en el CommandLineRunner
).
Esta es una combinación de la respuesta de @EliuX con @Quan Vo one. ¡Gracias a los dos!
La principal diferencia es que paso el código de respuesta SpringApplication.exit (contexto) como un parámetro al System.exit (), por lo que si hay un error al cerrar el contexto de Spring, lo notará.
SpringApplication.exit () cerrará el contexto de Spring.
System.exit () cerrará la aplicación.
@Component
public class OneTimeRunner implements CommandLineRunner {
@Autowired
private ConfigurableApplicationContext context;
@Override
public void run(String... args) throws Exception {
System.exit(SpringApplication.exit(context));
}
}