如何解决在Spring Boot中运行调度程序会生成Spring Boot应用程序上下文外部的进程
我正在计划一个在Spring Boot中以固定速率运行的任务。我用来安排任务的功能如下:
private void scheduleTask(Store store,int frequency) {
final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = store::scan;
scheduler.scheduleAtFixedRate(task,frequency,TimeUnit.MILLISECONDS);
}
这很好,但是如果在应用程序启动时出现异常,则应用程序应在异常退出。发生的是,我在日志中收到异常,并显示消息“ Application Failed to start”,但调度程序显示仍在运行,尽管看起来只有调度的线程仍在运行。
关于如何在Spring Boot应用程序中正确安排异步任务的任何提示?我尝试了@Scheduled批注,但根本无法运行。
解决方法
@Scheduled
应该可以工作。您是否已将@EnabledScheduling
批注添加到@Configuration
或@SpringBootApplication
? Scheduling Getting Started对其进行了详细说明。
关于scheduleTask
方法:那叫什么?它是在Spring环境之外开始的吗?如果是,那么Spring不会停止它。您必须照顾好生命周期。
您应该尝试使用@Scheduled
,因为它将为您管理线程池/执行器,并且大多数人会更容易理解。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。