美文网首页
如何动态地控制定时任务的调度

如何动态地控制定时任务的调度

作者: guessguess | 来源:发表于2021-08-12 16:15 被阅读0次

首先定义一个接口

import org.springframework.scheduling.Trigger;

public interface DynamicCustomTask extends Runnable{
    public Trigger getTrigger();
    public String getCron();
}

随后进行定义配置类

@Component
@Slf4j
public class DynamicSchedulingConfiguraion implements SchedulingConfigurer{
    
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        通过容器工具类将该接口的所有实现类找出。
        List<DynamicCustomTask> tasks = ApplicationContextUtils.getBeanList(DynamicCustomTask.class);
        if(CollectionUtils.isEmpty(tasks)) {
            return;
        }

        tasks.forEach(task -> {
            将任务进行注册
            taskRegistrar.addTriggerTask(() -> {
                try {
                    task.run();
                } catch (Exception e) {
                    log.error("定时任务%s运行时出现异常,内容为%s", task.getClass().getName(), e.getMessage());
                }
            }, task.getTrigger());
        });
    }

}

写个demo

@Component
public class DemoOne implements DynamicCustomTask{
    
    public static volatile String cron = "0/1 * * * * ?";
    
    @Override
    public void run() {
        System.out.println("任务执行中" + new Date().toString());
    }

    @Override
    public Trigger getTrigger() {
        Trigger trigger = new Trigger() {
            @Override
            public Date nextExecutionTime(TriggerContext triggerContext) {
                CronTrigger trigger = new CronTrigger(getCron());
                Date nextExec = trigger.nextExecutionTime(triggerContext);
              return nextExec;
            }
        };
        return trigger;
    }

    @Override
    public String getCron() {
        return cron;
    }

}

测试方法

    @Test
    public void test() throws InterruptedException {
        while(true) {
            Thread.sleep(1000);
            DemoOne.cron = "0/10 * * * * ?";
        }
    }

运行结果


运行结果

相关文章

  • 如何动态地控制定时任务的调度

    首先定义一个接口 随后进行定义配置类 写个demo 测试方法 运行结果

  • spring 任务调度(定时任务)

    spring 任务调度(定时任务) 本文将告诉你如何使用spring的任务调度。主要使用@Scheduled注解 ...

  • Java定时任务调度工具详解

    本篇内容:什么是定时任务调度?Java定时任务调度工具详解之 Timer篇Java定时任务调度工具详解之 Quar...

  • 学习Linux2

    linux 学习2 定时任务管理 crond 任务调度 crontab 进行 定时任务的设置 概述任务调度:是指系...

  • 定时任务调度之Timer

    定时任务调度之Timer 前言 定时任务调度,有两个比较重要的概念,一个是定时,一个是调度,所谓的定时调度,指的是...

  • Spring定时调度器原理

    定时调度器主要是负责一些定时任务的调度,

  • 定时任务框架Quartz

    定时任务框架! 定时任务就是分为三个模块:任务、触发器、调度器 过程就是,调度器协调触发器来再固定时间去触发任务!

  • Linux任务调度

    crond任务调度 crontab用于定时任务的设置。任务调度:是指系统在某个时间执行的特定的命令或程序。任务调度...

  • 关于任务定时调度

    Tags:定时作业调度 分布式定时任务调度 Quartz TBSchedule Elastic-job 基于给定...

  • crond任务调度(定时任务调度)

    基本语法crontab [选项]选项-e : 编辑crontab定时任务-l : 查询crontab定时任务...

网友评论

      本文标题:如何动态地控制定时任务的调度

      本文链接:https://www.haomeiwen.com/subject/rpmlbltx.html