要实现每天任意时间段随机执行任务,可以使用Quartz的CronTrigger和RandomIntervalTrigger。

  1. CronTrigger

CronTrigger是基于cron表达式的触发器,可以指定任务在每天的特定时间点执行。例如,下面的cron表达式表示每天的10点到11点之间每隔5分钟执行一次任务:

0 0/5 10-11 * * ?
  1. 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分钟
  1. 结合使用

要实现每天任意时间段随机执行任务,可以结合使用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 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录