我正在使用Spring Boot构建一个命令行Java应用程序,以快速使其工作。
该应用程序加载不同类型的文件(例如CSV文件)并将它们加载到Cassandra数据库中。它不使用任何Web组件,也不是Web应用程序。
我遇到的问题是在完成任务后停止应用程序。我正在使用Spring CommandLineRunner接口和@Component
运行任务,如下所示,但当任务完成后,应用程序不会停止运行,而且我找不到停止应用程序的方法。
@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();
}
}
更新: 问题似乎出在spring-cassandra
,因为项目中没有其他问题。有人知道为什么它会在后台保持线程运行,从而阻止应用程序停止吗?
更新: 通过升级到最新的Spring Boot版本,问题已消失。
context.close()
停止应用程序后,这些线程需要一些时间来关闭。 - ESala