版权声明:一家之言,看完就忘了吧 https://blog.csdn.net/leisure_life/article/details/89317923
package cn.com.suntree.cmp.service;
import cn.com.suntree.cmp.utils.CommonUtil;
import lombok.extern.log4j.Log4j2;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
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 redis.clients.jedis.Jedis;
import java.util.Date;
@Component
@Log4j2
public class MyDynamicTask implements SchedulingConfigurer {//实现SchedulingConfigurer 接口
@Autowired
CommonUtil commonUtil;
@Autowired
TaskService taskService;
private static String cron;
@Override
public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {//重写该方法
scheduledTaskRegistrar.addTriggerTask(doTask(), getTrigger());
}
private Runnable doTask() {
return new Runnable() {
@Override
public void run() {
log.info("-------------------------------执行"+cron);
taskService.monDay();//真正需要运行的逻辑代码
}
};
}
private Trigger getTrigger() {
return new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
// 触发器
CronTrigger trigger = new CronTrigger(getCron());
return trigger.nextExecutionTime(triggerContext);
}
};
}
public String getCron() {
Jedis jedis = commonUtil.getJedis();
String newCron = jedis.get("cron");//可以改成配置到数据库中
if (StringUtils.isEmpty(newCron)) {
jedis.set("cron","0 30 0 ? * Mon");
return "0 30 0 ? * Mon";
}
if (!newCron.equals(cron)) {
log.info(new StringBuffer("Cron has been changed to:'").append(newCron).append("'. Old cron was:'").append(cron).append("'").toString());
cron = newCron;
}
return cron;
}
}