Schedule定时任务实时配置cron表达式和开关

 本文介绍基于SchedulingConfigurer实现定时任务实时配置cron表达式和开关

  1. 第一步:重写SchedulingConfigurer配置类的configureTasks()方
@Slf4j
@Configuration
public class MyScheduleConfig implements SchedulingConfigurer {

    @Autowired
    private TaskService taskService;
    @Resource
    private SysConfigDao sysConfigDao;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        scheduledTaskRegistrar.addTriggerTask(()->{
            log.info("【定时任务】任务开始执行");
            String status = sysConfigDao.getValueByKey(ScheduleConstant.STATUS_KEY);
            log.info("【定时任务】开关配置:{}", status);
            if(StringUtils.isEmpty(status)){
                log.info("【定时任务】缺少开关配置,将使用默认配置:on");
                status = ScheduleConstant.DEFAULT_STATUS;
            }
            if("on".equals(status)){
                // 执行业务
                taskService.doTask();
            }
        }, triggerContext -> {
            String cron = sysConfigDao.getValueByKey(ScheduleConstant.CRON_KEY);
            log.info("【定时任务】cron配置:{}", cron);
            if(StringUtils.isEmpty(cron)){
                log.info("【定时任务】缺少cron配置,将使用默认配置,每10秒执行一次");
                cron = ScheduleConstant.DEFAULT_CRON;
            }
            return new CronTrigger(cron).nextExecutionTime(triggerContext);
        });
    }
}

     2、第二步: 编写控制器类代码

@RestController
public class ScheduleController {

    @Resource
    private SysConfigDao sysConfigDao;

    /**
     * 获取配置信息
     * @return
     */
    @GetMapping("config")
    public Map<String, String> config(){
        String cron = sysConfigDao.getValueByKey(ScheduleConstant.CRON_KEY);
        String status = sysConfigDao.getValueByKey(ScheduleConstant.STATUS_KEY);
        Map<String, String> result = new HashMap<>();
        result.put("cron", cron);
        result.put("status", status);
        return result;
    }

    /**
     * 修改表达式
     * @param cron
     * @return
     */
    @PutMapping("cron")
    public boolean cron(@RequestParam(value = "cron", required = true) String cron){
        // TODO cron表达式做格式校验
        return sysConfigDao.updateValueByKey(ScheduleConstant.CRON_KEY, cron) > 0;
    }

    /**
     * 修改开关状态
     * @param status
     * @return
     */
    @PutMapping("status")
    public boolean status(@RequestParam(value = "status", required = true)String status){
        // TODO status做格式校验
        return sysConfigDao.updateValueByKey(ScheduleConstant.STATUS_KEY, status) > 0;
    }

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值