记动态获取定时任务并判断是否执行

动态

注意点

  1. 在启动类必须加上@EnableScheduling
  2. 实现SchedulingConfigurer并重写configureTasks方法
  3. 动态获取定时任务的执行时间 用的是ScheduledTaskRegistrar的addTriggerTask方法,
  4. 如果使用静态定时任务可以换用基于注解@Scheduled的方法 或者用ScheduledTaskRegistrar的addCronTask方法

代码

@Component
public class ResolveOrdsTask extends BaseService implements SchedulingConfigurer {

    @Autowired
    private TimingService timingService;
    @Autowired
    private TaskLogRepository taskLogRepository;

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
        QComTaskEntity qComTaskEntity = QComTaskEntity.comTaskEntity;

/**
 * 定时任务的具体业务
 */
        scheduledTaskRegistrar.addTriggerTask(
                //1.添加任务内容(Runnable)
                () -> {
                    //具体的业务处理
					//记录日志
                    TaskLogEntity taskLogEntity = null;
                    try {
                        String noActiveFlag = queryFactory.select(qComTaskEntity.noActiveFlag)
                                .from(qComTaskEntity)
                                .where(qComTaskEntity.taskCode.eq(TaskCode.TASK_RESOLVEORDS)).fetchFirst();
                        if (!"Y".equals(noActiveFlag)) {//如果不是"不可用状态" 处理具体业务逻辑
                            
							RespResult<List<Long>> result =xxxService.xxx();//具体业务
                           //日志
						   taskLogEntity = new TaskLogEntity( );
                        } else {
                            taskLogEntity = new TaskLogEntity();
                        }
                    } catch (Exception e) {
                        taskLogEntity = new TaskLogEntity( );
                    } finally {
                        if (taskLogEntity != null) {
						//保存日志
                            taskLogRepository.save(taskLogEntity);
                        }
                    }
                },
                //2.设置执行周期(Trigger)
                triggerContext -> {
                    //2.1 从数据库获取执行周期
                    String cron = queryFactory.select(qComTaskEntity.runTime)
                            .from(qComTaskEntity)
                            .where(qComTaskEntity.taskCode.eq(TaskCode.TASK_RESOLVEORDS)).fetchFirst();
                    //  String cron = cronMapper.getCron();
                    //2.2 合法性校验.
                    if (StringUtils.isEmpty(cron)) {
					//日志
                        TaskLogEntity taskLogEntity1 = new TaskLogEntity();
                        taskLogRepository.save(taskLogEntity1);
                        return null;
                    }
                    //2.3 返回执行周期(Date)
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                }
        );
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值