SpringBoot定时任务(静态/动态)--schedule

1、概念

定时任务就是在指定的时间点,自动执行指定的任务。或者在指定的时间间隔,自动进行任务的执行。如:每天中午两点一次等。而在schedule中,这个时间是由cron表达式来决定的。
cron表达式如下:
由六个字段组成,分别代表:
秒、分钟、小时、天、月和星期

0 0 8 * * * //表示每天上午8点执行任务
0 0/30 9-17 * * * //表示在每天9点到17点之间,每隔30分钟执行一次任务

2、 静态定时任务

所谓静态就是指代码中定好任务的执行周期及任务,启动后不能进行动态更改。
@Component — 注入spring容器
@Scheduled(finxedRate = “”) — 在方法上开启定时任务,finxedRate代表执行间隔(ms),也可加入正则表达式@Scheduled(cron = “”)
@EnableScheduling — springboot启动类上添加,开启定时任务

启动类:

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

定时任务

@Component
public class ScheduleTest {

    @Scheduled(cron = "0/5 * * * * *")
    public void crontest(){
        System.out.println("1111");
    }
}

项目启动后任务会自动执行

3、动态定时任务

SchedulingConfigurer — 继承并配置定时任务
@EnableScheduling — 开启
@Configuration — 说明配置类
动态定时任务在项目启动后,可以随时进行任务的添加和卸载。方便任务执行和停止。具体如下:

@Configuration
public class ScheduleConfig implements SchedulingConfigurer {

    private ScheduledTaskRegistrar taskRegistrar;

    //存储任务实例,用于保存任务实例
    private Map<String,CronTask> taskMap = new HashMap<>();

    //用于保存进程实例,对其进行操作
    private Map<String,ScheduledFuture> futureMap = new HashMap<>();

    //初始化时加载
    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        this.taskRegistrar = taskRegistrar;
    }

    //添加任务,并执行,把执行实例放到future中方便控制
    public void addTask(String key, CronTask task){
        if(taskMap.containsKey(key)){
            return;
        }
        taskRegistrar.addTriggerTask(task);
        taskMap.put(key,task);
        TaskScheduler scheduler = taskRegistrar.getScheduler();
        ScheduledFuture<?> schedule = scheduler.schedule(task.getRunnable(), task.getTrigger());
        futureMap.put(key,schedule);
    }

    public void removeTask(String key){
        if(!taskMap.containsKey(key)){
            return;
        }
        taskRegistrar.getCronTaskList().remove(taskMap.get(key));
        taskMap.remove(key);
        //停止执行中的任务
        futureMap.get(key).cancel(true);
        futureMap.remove(key);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值