I am building a Command Line java application using Spring Boot to get it working quickly.
The application loads different types of files (for example CSV) and loads them into a Cassandra Database. It does NOT use any web components, it is not a web application.
The problem I am having is to stop the application when the work is done. I am using the Spring CommandLineRunner interface with a @Component
to run the tasks, as shown below, but when the work is completed the application does not stop, it keeps running for some reason and I can't find a way to stop it.
@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: the problem seems to be spring-cassandra
, since there is nothing else in the project. Does anyone know why it keeps threads running in the background that prevent the application from stopping?
UPDATE: the problem disappeared by updating to the latest spring boot version.
I found a solution. You can use this:
public static void main(String[] args) {
SpringApplication.run(RsscollectorApplication.class, args).close();
System.out.println("done");
}
Just use .close()
on run.