Fork me on GitHub

springcloud-定时任务

1.定时时间固定,只能在后台代码更改

@Configuration
@EnableScheduling
public class ScheduleTask {
    @Autowired     private UploadServiceImpl uploadServiceImpl;

    //添加定时任务,写死时间
    @Scheduled(cron = "0 */1 * * * ?")
    private void configureTasks() {
        uploadServiceImpl.putLocalFile(); //任务内容
    }
}

2.在数据库获取定时时间

  2.1 建表

DROP TABLE IF EXISTS `cron`;
CREATE TABLE `cron`  (
  `cron_id` varchar(30) NOT NULL PRIMARY KEY,
  `cron` varchar(30) NOT NULL  
);
INSERT INTO `cron` VALUES ('1', '0/5 * * * * ?');

       select cron from cron limit 1;

  2.2  后台代码

@Configuration
@EnableScheduling
public class ScheduleTask implements SchedulingConfigurer {
    //获取数据库定时时间
    @Autowired     private UploadServiceImpl uploadServiceImpl; 

    //添加定时任务,写死时间
    @Scheduled(cron = "0 */1 * * * ?")
    private void configureTasks() {
        uploadServiceImpl.putLocalFile(); //任务内容
    }

//添加定时任务,数据库可修改时间格式
    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {

        scheduledTaskRegistrar.addTriggerTask(
                //1.添加任务内容(Runnable)
                () -> uploadServiceImpl.putLocalFile(),
                //2.设置执行周期(Trigger)
                triggerContext -> {
                    //2.1 从数据库获取执行周期
                    String cron = uploadServiceImpl.getCron();
                    //2.2 合法性校验.
                    if (StringUtils.isEmpty(cron)) {
                       throw new RuntimeException("定时格式错误");
                    }
                    //2.3 返回执行周期(Date)
                    return new CronTrigger(cron).nextExecutionTime(triggerContext);
                }
        );
    }


    }

 

posted @ 2021-06-25 17:43  亲爸爸  阅读(1660)  评论(0编辑  收藏  举报