1

Runnable を実装して特定のタスクをスケジュールするこの Quarterly Metric Report Scheduling Service を実行する関数を呼び出すことができstart()ますが、スケジュール時間を変更する必要がある場合に備えて、スケジュールされたタスクを後で停止/キャンセルできる必要もあります。

私は多くの投稿を読み、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();
            }


    }
4

1 に答える 1