gpt4 book ai didi

multithreading - 如何使 Spring Boot @Scheduled 线程超时

转载 作者:行者123 更新时间:2023-12-03 12:47:01 24 4
gpt4 key购买 nike

我有一个 Spring Boot 应用程序,它在一天的特定时间运行许多作业(由 CRON 配置)。
现在我发现应用程序正在运行,但计划的作业没有得到执行。
有什么方法可以为 Spring 中用 @Scheduled 注释的任务添加超时。

这样即使作业被阻塞或等待,也能被杀死,让其他线程顺利执行。线程可以等待指定的时间,然后如果任务还没有完成,杀死线程。

我知道我可以使用以下方法增加池大小:

Executors.newScheduledThreadPool();

但是如果最终所有线程都被阻塞会发生什么

我浏览了论坛,看到了使用 FutureTasks 提到的解决方案。这可以应用于带有@Scheduled 注释的任务吗?
由于应用程序是 spring-boot,因此也没有 xml 配置来配置超时。

最佳答案

您可以使用 TaskScheduler启动和控制任务。在您的 @Configuration类(class):

@Configuration
public class YourConfig {

@Bean
public TaskScheduler scheduler() {
return new ThreadPoolTaskScheduler();
}
// ...

之后,您可以通过以下方式安排您的任务:
@Service
public class YourTaskRunnable implements Runnable {

@Autowired
private TaskScheduler scheduler;

@PostConstruct
private void init() {
ScheduledFuture future = this.scheduler.schedule(this, /* to execute immediately, for example */ Calendar.getInstance().getTime());
// ...
}


@Override
public void run() {
// Your task code ...
}
}

关于multithreading - 如何使 Spring Boot @Scheduled 线程超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31738755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com