| | |
| | | package com.stylefeng.guns.modular.system.util.quartz; |
| | | |
| | | import com.stylefeng.guns.modular.system.util.quartz.model.QuartzEnum; |
| | | import com.stylefeng.guns.modular.system.util.quartz.model.QuartzJob; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.quartz.*; |
| | | import org.quartz.impl.matchers.GroupMatcher; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.io.InputStream; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | |
| | | * @Date 2024/3/20 11:12 |
| | | */ |
| | | @Slf4j |
| | | @Component |
| | | public class QuartzUtil { |
| | | /** |
| | | * 构建调度器 |
| | | */ |
| | | public static Scheduler scheduler; |
| | | |
| | | |
| | | /** |
| | | * 启动调度器 |
| | | * @param propertiesStream 配置文件流 |
| | | * @return |
| | | */ |
| | | public static void start(InputStream propertiesStream){ |
| | | if(null == scheduler){ |
| | | scheduler = SchedulerUtil.getScheduler(propertiesStream); |
| | | } |
| | | try { |
| | | scheduler.start(); |
| | | log.info(QuartzEnum.SCHEDULER_START_SUCCESS.getValue()); |
| | | } catch (SchedulerException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | @Autowired |
| | | private Scheduler scheduler; |
| | | |
| | | |
| | | |
| | |
| | | |
| | | /** |
| | | * 添加普通定时任务 |
| | | * @param quartzJob 任务类 |
| | | * @param startTime 任务开始执行时间,为空则立即执行 |
| | | * @param intervalInMilliseconds 执行间隔毫秒数 |
| | | * @param repeatCount 重复执行次数,-1表示永远执行 |
| | | * @throws SchedulerException |
| | | */ |
| | | public static void addSimpleQuartzTask(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException { |
| | | if(null == scheduler){ |
| | | log.error("请先加载任务调取器"); |
| | | public void addSimpleQuartzTask(Class<? extends Job> clazz, String job_name, String group_name, JobDataMap jobDataMap, Date startTime, long intervalInMilliseconds, int repeatCount) throws SchedulerException { |
| | | JobKey jobKey = JobKey.jobKey(job_name, group_name); |
| | | if(scheduler.checkExists(jobKey)){ |
| | | log.error("[添加定时任务]已存在该作业,jobkey为:{}", jobKey); |
| | | return; |
| | | } |
| | | JobDetail jobDetail = getJobDetail(quartzJob); |
| | | Trigger simpleTrigger = getSimpleTrigger(quartzJob, startTime, intervalInMilliseconds, repeatCount); |
| | | scheduler.scheduleJob(jobDetail, simpleTrigger); |
| | | log.info(QuartzEnum.ADD_SIMPLE_TRIGGER_SUCCESS.getValue()); |
| | | // 构建 Job |
| | | JobDetail job = JobBuilder.newJob(clazz) |
| | | .setJobData(jobDataMap) |
| | | .withIdentity(jobKey).build(); |
| | | // 构建 Trigger |
| | | Trigger trigger = getSimpleTrigger(job_name, group_name, startTime, intervalInMilliseconds, repeatCount); |
| | | // 启动调度器 |
| | | scheduler.scheduleJob(job, trigger); |
| | | scheduler.start(); |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 添加Cron表达式的定时任务 |
| | | * @param quartzJob 任务类 |
| | | * @param cron cron表达式 |
| | | * @throws SchedulerException |
| | | */ |
| | | public static void addCronQuartzTask(QuartzJob quartzJob, String cron) throws SchedulerException { |
| | | if(null == scheduler){ |
| | | log.error("请先加载任务调取器"); |
| | | public void addCronQuartzTask(Class<? extends Job> clazz, String job_name, String group_name, JobDataMap jobDataMap, String cron) throws SchedulerException { |
| | | JobKey jobKey = JobKey.jobKey(job_name, group_name); |
| | | if(scheduler.checkExists(jobKey)){ |
| | | log.error("[添加定时任务]已存在该作业,jobkey为:{}", jobKey); |
| | | return; |
| | | } |
| | | JobDetail jobDetail = getJobDetail(quartzJob); |
| | | Trigger cronTrigger = getCronTrigger(quartzJob, cron); |
| | | scheduler.scheduleJob(jobDetail, cronTrigger); |
| | | log.info(QuartzEnum.ADD_CRON_TRIGGER_SUCCESS.getValue()); |
| | | // 构建 Job |
| | | JobDetail job = JobBuilder.newJob(clazz) |
| | | .setJobData(jobDataMap) |
| | | .withIdentity(jobKey).build(); |
| | | // 构建 Trigger |
| | | Trigger trigger = getCronTrigger(job_name, group_name, cron); |
| | | // 启动调度器 |
| | | scheduler.scheduleJob(job, trigger); |
| | | scheduler.start(); |
| | | } |
| | | |
| | | |
| | |
| | | * @param group 任务分组 |
| | | * @return |
| | | */ |
| | | public static boolean deleteQuartzTask(String name, String group){ |
| | | public boolean deleteQuartzTask(String name, String group){ |
| | | JobKey jobKey = new JobKey(name, group); |
| | | boolean b = false; |
| | | try { |
| | |
| | | * @param jobKey |
| | | * @return |
| | | */ |
| | | public static boolean deleteQuartzTask(JobKey jobKey){ |
| | | public boolean deleteQuartzTask(JobKey jobKey){ |
| | | boolean b = false; |
| | | try { |
| | | b = scheduler.deleteJob(jobKey); |
| | |
| | | * @param group 分组名称 |
| | | * @return |
| | | */ |
| | | public static boolean deleteGroupQuartzTask(String group){ |
| | | public boolean deleteGroupQuartzTask(String group){ |
| | | try { |
| | | GroupMatcher<JobKey> groupMatcher = GroupMatcher.groupEquals(group); |
| | | Set<JobKey> jobKeys = scheduler.getJobKeys(groupMatcher); |
| | |
| | | * 清空所有定时任务 |
| | | * @return |
| | | */ |
| | | public static boolean deleteAllQuartzTask(){ |
| | | public boolean deleteAllQuartzTask(){ |
| | | try { |
| | | List<String> jobGroupNames = scheduler.getJobGroupNames(); |
| | | for (String jobGroupName : jobGroupNames) { |
| | |
| | | |
| | | /** |
| | | * 构建任务描述JobDetail对象 |
| | | * @param quartzJob 任务对象 |
| | | * @return |
| | | */ |
| | | private static JobDetail getJobDetail(QuartzJob quartzJob){ |
| | | String name = quartzJob.getName(); |
| | | String group = quartzJob.getGroup(); |
| | | if(null == name || "".equals(name)){ |
| | | name = QuartzEnum.JOB_NAME.getValue(); |
| | | private JobDetail getJobDetail(Job job, String job_name, String group_name){ |
| | | if(null == job_name || "".equals(job_name)){ |
| | | job_name = QuartzEnum.JOB_NAME.getValue(); |
| | | } |
| | | if(null == group || "".equals(group)){ |
| | | group = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | if(null == group_name || "".equals(group_name)){ |
| | | group_name = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | } |
| | | return getJobDetail(quartzJob, name, group, quartzJob.getJobDataMap()); |
| | | return getJobDetail(job, job_name, group_name, null); |
| | | } |
| | | |
| | | |
| | |
| | | * @param jobDataMap 自定义参数 |
| | | * @return |
| | | */ |
| | | private static JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){ |
| | | private JobDetail getJobDetail(Job job, String job_name, String group_name, JobDataMap jobDataMap){ |
| | | JobDetail jobDetail = JobBuilder.newJob(job.getClass()) |
| | | .withIdentity(job_name, group_name) |
| | | .setJobData(jobDataMap) |
| | |
| | | |
| | | /** |
| | | * 构建Trigger执行器 |
| | | * @param quartzJob 任务类 |
| | | * @param startTime 任务开始执行时间,为空则立即执行 |
| | | * @param intervalInMilliseconds 执行间隔毫秒数 |
| | | * @param repeatCount 重读执行次数,-1表示永远执行 |
| | | * @return |
| | | */ |
| | | private static Trigger getSimpleTrigger(QuartzJob quartzJob, Date startTime, long intervalInMilliseconds, int repeatCount){ |
| | | String name = quartzJob.getName(); |
| | | String group = quartzJob.getGroup(); |
| | | if(null == name || "".equals(name)){ |
| | | name = QuartzEnum.JOB_NAME.getValue(); |
| | | private static Trigger getSimpleTrigger(String job_name, String group_name, Date startTime, long intervalInMilliseconds, int repeatCount){ |
| | | if(null == job_name || "".equals(job_name)){ |
| | | job_name = QuartzEnum.JOB_NAME.getValue(); |
| | | } |
| | | if(null == group || "".equals(group)){ |
| | | group = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | if(null == group_name || "".equals(group_name)){ |
| | | group_name = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | } |
| | | TriggerBuilder<Trigger> triggerTriggerBuilder = TriggerBuilder.newTrigger(); |
| | | if(null == startTime){ |
| | |
| | | } |
| | | |
| | | SimpleTrigger trigger = triggerTriggerBuilder |
| | | .withIdentity(name, group) |
| | | .withIdentity(job_name, group_name) |
| | | .withSchedule( |
| | | SimpleScheduleBuilder |
| | | .simpleSchedule() |
| | |
| | | |
| | | /** |
| | | * 构建cronExpression表达式执行器 |
| | | * @param quartzJob 任务类 |
| | | * @param cron cron表达式 |
| | | * @return |
| | | */ |
| | | private static Trigger getCronTrigger(QuartzJob quartzJob, String cron) { |
| | | String name = quartzJob.getName(); |
| | | String group = quartzJob.getGroup(); |
| | | if(null == name || "".equals(name)){ |
| | | name = QuartzEnum.JOB_NAME.getValue(); |
| | | private static Trigger getCronTrigger(String job_name, String group_name, String cron) { |
| | | if(null == job_name || "".equals(job_name)){ |
| | | job_name = QuartzEnum.JOB_NAME.getValue(); |
| | | } |
| | | if(null == group || "".equals(group)){ |
| | | group = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | if(null == group_name || "".equals(group_name)){ |
| | | group_name = QuartzEnum.DEFAULT_GROUP.getValue(); |
| | | } |
| | | CronTrigger trigger = TriggerBuilder.newTrigger() |
| | | .startNow() |
| | | .withIdentity(name, group) |
| | | .withIdentity(job_name, group_name) |
| | | .withSchedule( |
| | | CronScheduleBuilder.cronSchedule(cron) |
| | | ).build(); |