gpt4 book ai didi

java - 停止/取消 ScheduledFuture

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

我能够调用 start() 函数来运行这个实现 Runnable 的季度指标报告计划服务来计划某个任务,但我还需要能够停止/取消计划的任务稍后执行任务,以防我需要更改计划时间。

我阅读了很多帖子并尝试了多种方法来使 stop() 函数正常工作,但没有成功。我想我的问题也可能是我如何找到/检索计划任务并取消它们?

有人可以帮忙吗?非常感谢。

    @Configuration
@EnableScheduling
public class QuarterlyMetricReportScheduling{

@Autowired
QuarterlyMetricReportService qmrService;

ScheduledFuture sf;

CronTrigger trigger;

int shutdownTimeout = 1 * 60 * 1000;//10 sec

@Autowired
QuarterlyMetricReportSchedulingService task;

public ThreadPoolTaskScheduler threadPoolTaskScheduler() {
ThreadPoolTaskScheduler tps = new ThreadPoolTaskScheduler();
tps.setThreadNamePrefix("job");
return tps;
}

public void changeTrigger(String cronExpression){
System.out.println("change trigger to: " + cronExpression);
trigger = new CronTrigger(cronExpression);
start();
}

public void start(){

ThreadPoolTaskScheduler tps = new ThreadPoolTaskScheduler();
tps.initialize();
task = new QuarterlyMetricReportSchedulingService();
tps.schedule(task, trigger);
}

public void stop() {

ThreadPoolTaskScheduler tps = threadPoolTaskScheduler();
//tps = new ThreadPoolTaskScheduler();
//tps.setThreadNamePrefix("job");
tps.initialize();
task = new QuarterlyMetricReportSchedulingService();
trigger = new CronTrigger("0 59 11 26 3 ?");
tps.schedule(task, trigger);
ScheduledExecutorService scheduledExecutorService = tps.getScheduledExecutor();
try {
//ScheduledServiceExecutor service =
//Executors.newSingleThreadScheduledExecutor();
task = new QuarterlyMetricReportSchedulingService();
ScheduledFuture future = scheduledExecutorService.scheduleWithFixedDelay(
task, 1, 1, TimeUnit.MILLISECONDS);

future.cancel(true);
scheduledExecutorService.shutdown();
}


}

最佳答案

你只在 stop 方法中安排你的任务,这似乎有点奇怪。

您需要在开始时安排任务,将 future 作为句柄,然后在 stop 方法中对 future 调用取消。

您应该创建一个线程池一次并将其用于所有报告,否则就没有池化。

关于java - 停止/取消 ScheduledFuture,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15642706/

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