springboot动态定时任务,动态修改cron参数,Date时间转化为定时任务cron格式

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动态修改定时任务就大功告成啦.

你可能感兴趣的:(java工具)