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

本文介绍了一个Spring Boot应用中实现动态定时任务的方法,通过从数据库获取动态时间并转换为Cron表达式,实现了定时任务的灵活调整,适用于需要按非固定时间执行任务的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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动态修改定时任务就大功告成啦.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值