2013-03-26 102 views
1

我可以调用start()函数来运行此Quarterly Metric Report Scheduling Service,该服务实现了Runnable来调度某个任务,但是我还需要能够在以后的情况下停止/取消计划任务需要更改计划时间。stop/cancel ScheduledFuture

我已阅读了很多帖子,并尝试了几种方法使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(); 
      } 


    } 
+2

'10秒'为'10 * 1000'而不是'10 * 60 * 1000'。 – 2013-03-26 16:48:34

回答

0

看起来有点奇怪,你只在stop方法中安排你的任务。

您需要在开始时计划任务,将未来保留为句柄,然后在停止方法中调用未来的取消。

您应该创建一个线程池并将其用于所有报告,否则不会合并。

相关问题