SpringBoot动态定时任务

1.创建定时任务类

package com.example.demo;

import cn.hutool.core.date.DateUtil;
import com.example.demo.service.CronService;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
import org.springframework.scheduling.support.CronTrigger;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;

/**
 * @program practice
 * @ClassName Cron
 * @description:
 * @author: ID-Tang
 * @create: 2022-09-26 16:39
 **/
@Component
public class Cron implements SchedulingConfigurer {
    /**
     * 第一个动态定时任务cron表达式
     */
    private String cron1;

    public void setCron1(String cro) {
        this.cron1 = cro;
    }

    /**
     * 第二个动态定时任务cron表达式
     */
    private String cron2;

    public void setCron2(String cro) {
        this.cron2 = cro;
    }
	
    /**
    * 通过此service
    * 从数据库获取cron表达式
    */
    @Resource
    CronService cronService;

    /**
     * 初始化时调用
     * 目的:为动态定时任务赋予初始值
     */
    @PostConstruct
    public void doConstruct() {
        this.cron1 = "0/10 * * * * ?";
        //该处为从数据库查询cron定时任务方法,返回值为cron表达式
        this.cron2 = cronService.getCron();
    }

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
        //第一个动态定时任务
        // 动态使用cron表达式设置循环间隔
        taskRegistrar.addTriggerTask(() -> System.out.println("Current time: " + DateUtil.now()), triggerContext -> {
            // 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则
            CronTrigger cronTrigger = new CronTrigger(cron1);
            //--------此处替换执行操作
            System.out.println("执行操作");
            return cronTrigger.nextExecutionTime(triggerContext);
        });

        //第二个动态定时任务
        // 动态使用cron表达式设置循环间隔
        taskRegistrar.addTriggerTask(() -> System.out.println("Current time: " + DateUtil.now()), triggerContext -> {
            // 使用CronTrigger触发器,可动态修改cron表达式来操作循环规则
            CronTrigger cronTrigger = new CronTrigger(cron2);
            //--------此处替换执行操作
            System.out.println("执行操作2");
            return cronTrigger.nextExecutionTime(triggerContext);
        });
    }

}

2.通过接口调整定时任务执行时间间隔

package com.example.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @program: practice
 * @description:
 * @author: ID-Tang
 * @create: 2022-03-04 11:13
 **/
@RequestMapping("/test")
@RestController
public class TestController {
    /**
     * 定时任务类注入
     */
    private final Cron cron;
    @Autowired
    public TestController(Cron cron) {
        this.cron = cron;
    }

    @RequestMapping("/set")
    public String set(String cro) {
        cron.setCron1(cro);
        return "ok";
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ID-Tang

梦想支持度+1

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值