java Quartz 实现每天任意时间段随机执行
要实现每天任意时间段随机执行任务,可以使用Quartz的CronTrigger和RandomIntervalTrigger。
- CronTrigger
CronTrigger是基于cron表达式的触发器,可以指定任务在每天的特定时间点执行。例如,下面的cron表达式表示每天的10点到11点之间每隔5分钟执行一次任务:
0 0/5 10-11 * * ?
- RandomIntervalTrigger
RandomIntervalTrigger是基于随机时间间隔的触发器,可以在指定的时间段内随机执行任务。例如,下面的代码表示每天的10点到11点之间随机执行任务,每次执行间隔时间为5到10分钟之间的随机值:
RandomIntervalTrigger trigger = new RandomIntervalTrigger();
trigger.setStartTime(DateBuilder.todayAt(10, 0, 0));
trigger.setEndTime(DateBuilder.todayAt(11, 0, 0));
trigger.setMinInterval(300000L); // 5分钟
trigger.setMaxInterval(600000L); // 10分钟
- 结合使用
要实现每天任意时间段随机执行任务,可以结合使用CronTrigger和RandomIntervalTrigger。首先,使用CronTrigger指定任务在每天的特定时间点执行,然后在任务执行时判断当前时间是否在指定的时间段内,如果是,则使用RandomIntervalTrigger随机执行任务。例如,下面的代码表示每天的10点到11点之间每隔5分钟执行一次任务,然后在任务执行时判断当前时间是否在10点到11点之间,如果是,则随机执行任务:
public class MyJob implements Job {
public void execute(JobExecutionContext context) throws JobExecutionException {
Date now = new Date();
if (now.after(DateBuilder.todayAt(10, 0, 0)) && now.before(DateBuilder.todayAt(11, 0, 0))) {
RandomIntervalTrigger trigger = new RandomIntervalTrigger();
trigger.setMinInterval(300000L); // 5分钟
trigger.setMaxInterval(600000L); // 10分钟
trigger.triggered(context);
}
}
}
CronTrigger cronTrigger = newTrigger()
.withIdentity("cronTrigger", "group1")
.withSchedule(cronSchedule("0 0/5 10-11 * * ?"))
.build();
JobDetail job = newJob(MyJob.class)
.withIdentity("myJob", "group1")
.build();
scheduler.scheduleJob(job, cronTrigger);
原文地址: https://www.cveoy.top/t/topic/bFhs 著作权归作者所有。请勿转载和采集!