【发布时间】:2014-12-07 09:17:18
【问题描述】:
我正在使用 Spring Boot 构建一个命令行 java 应用程序以使其快速运行。
应用程序加载不同类型的文件(例如 CSV)并将它们加载到 Cassandra 数据库中。它不使用任何 Web 组件,它不是 Web 应用程序。
我遇到的问题是在工作完成后停止应用程序。我正在使用带有@Component 的 Spring CommandLineRunner 接口来运行任务,如下所示,但是当工作完成时,应用程序并没有停止,由于某种原因它一直在运行,我找不到停止它的方法.
@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 版本后问题消失了。
【问题讨论】:
-
有什么解决办法吗?它发生在普通的弹簧靴上(没有 cassandra)
-
@ACV 不,我只是忍受它。我了解到一些弹簧模块会产生自己的线程,例如Cassandra 有一个用于连接的线程池,或者当您使用侦听器容器时使用 RabbitMQ。在您调用
context.close()停止应用程序后,这些需要一些时间才能关闭。
标签: java spring spring-boot spring-data-cassandra