如何关闭 Spring Boot 命令行应用程序

我正在使用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

更新:通过更新到最新的春季启动版本,问题消失了。


答案 1

我找到了一个解决方案。您可以使用以下命令:

public static void main(String[] args) {
    SpringApplication.run(RsscollectorApplication.class, args).close();
    System.out.println("done");
}

只需在运行时使用即可。.close()


答案 2

答案取决于仍在工作的内容。你可能会发现一个线程转储(例如使用jstack)。但是,如果它是由Spring启动的任何内容,您应该能够在main()方法(或)中使用来停止应用程序。ConfigurableApplicationContext.close()CommandLineRunner


推荐