java 动态配置时间实现定时任务

import cn.gaozheng.sales.mapper.TblCreditRemindConfigMapper;
import cn.gaozheng.sales.model.po.TblCreditRemindConfig;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.Trigger;
import org.springframework.scheduling.TriggerContext;
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.Resource;
import java.util.Date;
import java.util.List;

/**
 * 短信定时任务
 *
 * @Author: 风度翩翩少年郎
 * @Date: 2022-06-24 09:46
 */
@Component
@Slf4j
public class SmsTask implements SchedulingConfigurer {
          
   
    @Resource
    private TblCreditRemindConfigMapper configMapper;
    /**
     * 定时任务
     */
    Runnable runnable = new Runnable() {
          
   
        @Override
        public void run() {
          
   
            // 定时任务要执行的内容
            log.info("定时任务开始-------------------------");
            send();
        }
    };

    Trigger trigger = new Trigger() {
          
   
        @Override
        public Date nextExecutionTime(TriggerContext triggerContext) {
          
   
            String cron = null;
            // 读取数据库配置
            List<TblCreditRemindConfig> configs = configMapper.selectAll();
            if (CollUtil.isNotEmpty(configs)) {
          
   
                TblCreditRemindConfig config = configs.stream().findFirst().orElse(null);
                if (ObjectUtil.isNotNull(config.getRemindTime())) {
          
   
//                     cron = "0/20 * * * * ?";
                    // 获取数据库定义的时间进行拼接(直接将表达式存在数据库更灵活)
                    cron = "0 00 " + config.getRemindTime() + " * * ?";
                    log.info("cron:-----------------------------------" + cron);
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                }
            }
            return null;
        }
    };

    @Override
    public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
          
   
        taskRegistrar.addTriggerTask(runnable, trigger);
    }

    /**
     * 为未达标的授信发送短信通知
     */
    public void send() {
          
   
      //执行任务的相关逻辑--------
    }
}
经验分享 程序员 微信小程序 职场和发展