1.需求:每天网站开始营业时(一般是7:30)开始执行更新数据库,但是这个7:30是可以修改的.
就是说这个定时任务不是固定时间执行的,执行时间有可能被更改;
话不多说,上代码,我会将所用的代码全部粘贴上来,大家可以参考:
/**
* 动态定时任务-->动态修改cron参数
*/
@Service
@EnableScheduling
public class ScheduledForDynamicCron implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
Runnable task = new Runnable() {
@Override
public void run() {
System.out.println("定时任务正在运行... " + new Date());
System.out.println("定时任务正在运行... " + new Date());
//核心任务逻辑代码部分-->执行更新数据库(我用的是springbootJPA)
springbootJpaRepo.updateDataBase();
System.out.println("数据库更新成功");
}
};
Trigger trigger = new Trigger() {
@Override
public Date nextExecutionTime(TriggerContext triggerContext) {
//1.从数据库或者redis获取网站开始营业时间(我是从数据库获取的),
//2.注意此处得到的是date类型的时间"2019-11-05 07:30:00"
//3.所以我需要将这个date时间转化为定时任务cron参数的格式"0 30 7 * * * ",
//4.于是用到了我的工具类--->DateUtils.getCron(Date time);
String openAm = DateUtils.getCron(TimeControlRepo.findAmOpenTime());
//任务触发,可修改任务的执行周期-->下次要执行的时间
CronTrigger trigger = new CronTrigger(openAm);
Date nextExec = trigger.nextExecutionTime(triggerContext);
return nextExec;
}
};
taskRegistrar.addTriggerTask(task, trigger);
}
}
//下面附上我的Date时间转化为定时任务cron参数的工具类:
public final class DateUtils {
/***
* convert Date to cron ,eg. "0 06 10 15 1 ? 2014"
* @param date : 时间点
* @return
*/
public static String getCron(java.util.Date date){
String dateFormat="s mm HH * * *";
return formatDateByPattern(date, dateFormat);
}
/***
* 修改cron参数格式
* @param date
* @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss
* @return
*/
public static String formatDateByPattern(Date date,String dateFormat){
SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
String formatTimeStr = null;
if (date != null) {
formatTimeStr = sdf.format(date);
}
return formatTimeStr;
}
}
//以上springboot动态修改定时任务就大功告成啦.