运行 Spring 引导中的调度程序正在生成 Spring 引导应用程序上下文外部的进程

Running scheduler in Spring boot is spawning a process external to Spring boot application context

我正在安排 运行 以固定速率启动 Spring 的任务。我用来安排任务的功能如下:

private void scheduleTask(Store store, int frequency) {
        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
        Runnable task = store::scan;
        scheduler.scheduleAtFixedRate(task, 0, frequency, TimeUnit.MILLISECONDS);
    }

这工作正常,但如果在应用程序启动时出现异常,应用程序应在异常时退出。发生的事情是我在日志中收到异常和消息“应用程序无法启动”,但看起来调度程序显示仍然 运行ning 尽管看起来只有计划的线程仍然 运行宁.

关于如何在 Spring 引导应用程序中正确安排异步任务的任何提示?我尝试了 @Scheduled 注释,但它根本没有 运行。

@Scheduled 应该可以。您是否将 @EnabledScheduling 注释添加到 @Configuration@SpringBootApplicationScheduling Getting Started 详细解释。

关于 scheduleTask 方法:它叫什么?它是在 Spring 上下文之外开始的吗?如果是,那么 Spring 不会阻止它。你必须照顾生命周期。

您应该尝试使用 @Scheduled,因为它将为您管理线程 pools/executors,大多数人会发现它更容易理解。