目标就是实现这个SchedulingConfigurer 接口
首先需定义一个实体
/**
* 任务名称
*/
private String taskName;
/**
* 这里我存放的是JOB的名称
*/
private String clazzName;
/**
* cron表达式
*/
private String cronExpression;
/**
* 状态(1:正常;0:停用)
*/
private String status;
之后就直接 实现这个SchedulingConfigurer 接口
@Configuration
@EnableScheduling // 2.开启定时任
public class ScheduledConfig implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//
for (Scheduled scheduled : scheduledService.getList()) {
//方式2:可更改任务周期,cron的值,可以自己在数据库或者Zookeeper之类的地方获取
taskRegistrar.addTriggerTask(new Runnable() {
@Override
public void run() {
//加开关方式:从数据库或者ZK等其他地方获取一个boolean值
/* if (!open) {
return;
}*/
//定时任务内容 具体内容
System.out.println("现在时间" + LocalDateTime.now().toLocalTime());
//这里我的枚举主要是为了匹配是执行哪个方法,如果是单个就不用枚举
switch(scheduled.getClazzName()) {
case "beifen": beifen();break;
case "clear": clear();break;
default:System.out.println("ERROR");
}
}
}, new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
//这个cron指的是更改下一次定时任务的执行执行周期。
//注意这里一定要重新获取这个对象,再get他的corn不然数据库修改后的值不会更新上来,还是之前的。
Scheduled scheduled2=scheduledService.queryScheduledById(scheduled.getId());
System.out.println("更新corn"+scheduled2.getCronExpression());
CronTrigger cronTrigger = new CronTrigger( scheduled2.getCronExpression());
return cronTrigger.nextExecutionTime(triggerContext);
}
});
}
}
}