<返回更多

SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来

2021-06-17  博客园  IT互联网新资讯
加入收藏

前言

问题描述

简介

传统定时器

@Component
public class SimpleSchedule {

    @Autowired
    TestMApper testMapper;

    @Scheduled(cron = "*/6 * * * * ?")
    private void process() {
        List<test> tests = testMapper.getTests();
        System.out.println(tests);
    }
}


@SpringBootApplication
public class CrontabApplication {
    public static void main(String[] args) {
        SpringApplication.run(CrontabApplication.class, args);
    }
}

SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来

 

动态定时器

V1.0

SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来

 


@Configuration
public class ScheduleConfigV1 implements SchedulingConfigurer {

    @Autowired
    CronMapper cronMapper;
    @Autowired
    TestMapper testMapper;
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(()-> {
                    System.out.println("执行定时器任务:" + LocalDateTime.now().toLocalTime());
                    List<test> tests = testMapper.getTests();
                    System.out.println(tests);
                },
                triggerContext -> {
                    List<cron> crons = cronMapper.getCron();
                    Cron cron = crons.get(0);
                    return new CronTrigger(cron.getCron()).nextExecutionTime(triggerContext);
                });
    }
}

SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来

 


SpringBoot整合定时器:定时任务不再硬编码,动态定时刷起来

 

V2.0

Registar


public void addCronTask(Runnable task, String cron) {
    addCronTask(new CronTask(task,cron));
}


public ScheduledTask scheduleCronTask(CronTask cronTask) {
    ScheduledTask scheduledTask;
    scheduledTask = new ScheduledTask();
    scheduledTask.future = this.taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger());
    return scheduledTask;
  }


public final class ScheduledTask {

    public volatile ScheduledFuture<!--?--> future;
    /**
     * 取消定时任务
     */
    public void cancel() {
        ScheduledFuture<!--?--> future = this.future;
        if (future != null) {
            future.cancel(true);
        }
    }
}


SchedulingRunnable task = new SchedulingRunnable(TestMapper.class, "getTests", null);
cronTaskRegistrar.addCronTask(task, "0/10 * * * * ?");

总结

-上面的代码已经上传至gitee
点我传送
https://gitee.com/zxhTom/crontab.git

原文链接:
https://www.cnblogs.com/zhangxinhua/p/14830103.html

如果觉得本文对你有帮助,可以转发关注支持一下

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>