|
@@ -1,29 +1,18 @@
|
|
|
package com.ifast.job.quartz;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
-
|
|
|
-import org.apache.log4j.Logger;
|
|
|
-import org.quartz.CronScheduleBuilder;
|
|
|
-import org.quartz.CronTrigger;
|
|
|
-import org.quartz.DateBuilder;
|
|
|
+import com.ifast.job.domain.ScheduleJobDO;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.quartz.*;
|
|
|
import org.quartz.DateBuilder.IntervalUnit;
|
|
|
-import org.quartz.Job;
|
|
|
-import org.quartz.JobBuilder;
|
|
|
-import org.quartz.JobDetail;
|
|
|
-import org.quartz.JobExecutionContext;
|
|
|
-import org.quartz.JobKey;
|
|
|
-import org.quartz.Scheduler;
|
|
|
-import org.quartz.SchedulerException;
|
|
|
-import org.quartz.Trigger;
|
|
|
-import org.quartz.TriggerBuilder;
|
|
|
-import org.quartz.TriggerKey;
|
|
|
import org.quartz.impl.matchers.GroupMatcher;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import com.ifast.job.domain.ScheduleJob;;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
+
|
|
|
+;
|
|
|
|
|
|
|
|
|
/**
|
|
@@ -33,36 +22,25 @@ import com.ifast.job.domain.ScheduleJob;;
|
|
|
* <small> 2018年3月23日 | Aron</small>
|
|
|
*/
|
|
|
@Service
|
|
|
+@Slf4j
|
|
|
public class QuartzManager {
|
|
|
- public final Logger log = Logger.getLogger(this.getClass());
|
|
|
- // private SchedulerFactoryBean schedulerFactoryBean
|
|
|
- // =SpringContextHolder.getBean(SchedulerFactoryBean.class);
|
|
|
- // @Autowired
|
|
|
- // @Qualifier("schedulerFactoryBean")
|
|
|
- // private SchedulerFactoryBean schedulerFactoryBean;
|
|
|
@Autowired
|
|
|
private Scheduler scheduler;
|
|
|
|
|
|
/**
|
|
|
* 添加任务
|
|
|
- *
|
|
|
- * @param scheduleJob
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
-
|
|
|
@SuppressWarnings("unchecked")
|
|
|
- public void addJob(ScheduleJob job) {
|
|
|
+ public void addJob(ScheduleJobDO job) {
|
|
|
try {
|
|
|
// 创建jobDetail实例,绑定Job实现类
|
|
|
- // 指明job的名称,所在组的名称,以及绑定job类
|
|
|
-
|
|
|
Class<? extends Job> jobClass = (Class<? extends Job>) (Class.forName(job.getBeanClass()).newInstance()
|
|
|
.getClass());
|
|
|
- JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(job.getJobName(), job.getJobGroup())// 任务名称和组构成任务key
|
|
|
+ // 任务名称和组构成任务key
|
|
|
+ JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(new JobKey(job.getJobName(), job.getJobGroup()))
|
|
|
.build();
|
|
|
- // 定义调度触发规则
|
|
|
- // 使用cornTrigger规则
|
|
|
- Trigger trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(), job.getJobGroup())// 触发器key
|
|
|
+ // 定义corn表达式调度触发器
|
|
|
+ Trigger trigger = TriggerBuilder.newTrigger().withIdentity(new TriggerKey(job.getJobName(), job.getJobGroup()))
|
|
|
.startAt(DateBuilder.futureDate(1, IntervalUnit.SECOND))
|
|
|
.withSchedule(CronScheduleBuilder.cronSchedule(job.getCronExpression())).startNow().build();
|
|
|
// 把作业和触发器注册到任务调度中
|
|
@@ -72,71 +50,21 @@ public class QuartzManager {
|
|
|
scheduler.start();
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
- e.printStackTrace();
|
|
|
+ log.error(e.getMessage());
|
|
|
}
|
|
|
}
|
|
|
- // public void addJob(ScheduleJob job) throws SchedulerException {
|
|
|
- // if (job == null || !ScheduleJob.STATUS_RUNNING.equals(job.getJobStatus())) {
|
|
|
- // return;
|
|
|
- // }
|
|
|
- //
|
|
|
- // TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(),
|
|
|
- // job.getJobGroup());
|
|
|
- //
|
|
|
- // CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
|
|
- //
|
|
|
- // // 不存在,创建一个
|
|
|
- //
|
|
|
- // if (null == trigger) {
|
|
|
- // Class<? extends Job> clazz =
|
|
|
- // ScheduleJob.CONCURRENT_IS.equals(job.getIsConcurrent())
|
|
|
- // ? QuartzJobFactory.class
|
|
|
- // : QuartzJobFactoryDisallowConcurrentExecution.class;
|
|
|
- //
|
|
|
- // JobDetail jobDetail = JobBuilder.newJob(clazz).withIdentity(job.getJobName(),
|
|
|
- // job.getJobGroup()).build();
|
|
|
- //
|
|
|
- // jobDetail.getJobDataMap().put("scheduleJob", job);
|
|
|
- //
|
|
|
- // CronScheduleBuilder scheduleBuilder =
|
|
|
- // CronScheduleBuilder.cronSchedule(job.getCronExpression());
|
|
|
- //
|
|
|
- // trigger = TriggerBuilder.newTrigger().withIdentity(job.getJobName(),
|
|
|
- // job.getJobGroup())
|
|
|
- // .withSchedule(scheduleBuilder).build();
|
|
|
- //
|
|
|
- // scheduler.scheduleJob(jobDetail, trigger);
|
|
|
- // } else {
|
|
|
- // // Trigger已存在,那么更新相应的定时设置
|
|
|
- //
|
|
|
- // CronScheduleBuilder scheduleBuilder =
|
|
|
- // CronScheduleBuilder.cronSchedule(job.getCronExpression());
|
|
|
- //
|
|
|
- // // 按新的cronExpression表达式重新构建trigger
|
|
|
- //
|
|
|
- // trigger =
|
|
|
- // trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
|
|
|
- //
|
|
|
- // // 按新的trigger重新设置job执行
|
|
|
- //
|
|
|
- // scheduler.rescheduleJob(triggerKey, trigger);
|
|
|
- // }
|
|
|
- // }
|
|
|
|
|
|
/**
|
|
|
* 获取所有计划中的任务列表
|
|
|
- *
|
|
|
- * @return
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public List<ScheduleJob> getAllJob() throws SchedulerException {
|
|
|
+ public List<ScheduleJobDO> getAllJob() throws SchedulerException {
|
|
|
GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
|
|
|
Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
|
|
|
- List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();
|
|
|
+ List<ScheduleJobDO> jobList = new ArrayList<>();
|
|
|
for (JobKey jobKey : jobKeys) {
|
|
|
List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
|
|
|
for (Trigger trigger : triggers) {
|
|
|
- ScheduleJob job = new ScheduleJob();
|
|
|
+ ScheduleJobDO job = new ScheduleJobDO();
|
|
|
job.setJobName(jobKey.getName());
|
|
|
job.setJobGroup(jobKey.getGroup());
|
|
|
job.setDescription("触发器:" + trigger.getKey());
|
|
@@ -155,15 +83,12 @@ public class QuartzManager {
|
|
|
|
|
|
/**
|
|
|
* 所有正在运行的job
|
|
|
- *
|
|
|
- * @return
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public List<ScheduleJob> getRunningJob() throws SchedulerException {
|
|
|
+ public List<ScheduleJobDO> getRunningJob() throws SchedulerException {
|
|
|
List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();
|
|
|
- List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());
|
|
|
+ List<ScheduleJobDO> jobList = new ArrayList<ScheduleJobDO>(executingJobs.size());
|
|
|
for (JobExecutionContext executingJob : executingJobs) {
|
|
|
- ScheduleJob job = new ScheduleJob();
|
|
|
+ ScheduleJobDO job = new ScheduleJobDO();
|
|
|
JobDetail jobDetail = executingJob.getJobDetail();
|
|
|
JobKey jobKey = jobDetail.getKey();
|
|
|
Trigger trigger = executingJob.getTrigger();
|
|
@@ -184,33 +109,24 @@ public class QuartzManager {
|
|
|
|
|
|
/**
|
|
|
* 暂停一个job
|
|
|
- *
|
|
|
- * @param scheduleJob
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public void pauseJob(ScheduleJob scheduleJob) throws SchedulerException {
|
|
|
+ public void pauseJob(ScheduleJobDO scheduleJob) throws SchedulerException {
|
|
|
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
scheduler.pauseJob(jobKey);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 恢复一个job
|
|
|
- *
|
|
|
- * @param scheduleJob
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public void resumeJob(ScheduleJob scheduleJob) throws SchedulerException {
|
|
|
+ public void resumeJob(ScheduleJobDO scheduleJob) throws SchedulerException {
|
|
|
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
scheduler.resumeJob(jobKey);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 删除一个job
|
|
|
- *
|
|
|
- * @param scheduleJob
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public void deleteJob(ScheduleJob scheduleJob) throws SchedulerException {
|
|
|
+ public void deleteJob(ScheduleJobDO scheduleJob) throws SchedulerException {
|
|
|
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
scheduler.deleteJob(jobKey);
|
|
|
|
|
@@ -218,31 +134,20 @@ public class QuartzManager {
|
|
|
|
|
|
/**
|
|
|
* 立即执行job
|
|
|
- *
|
|
|
- * @param scheduleJob
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public void runAJobNow(ScheduleJob scheduleJob) throws SchedulerException {
|
|
|
+ public void runAJobNow(ScheduleJobDO scheduleJob) throws SchedulerException {
|
|
|
JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
scheduler.triggerJob(jobKey);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 更新job时间表达式
|
|
|
- *
|
|
|
- * @param scheduleJob
|
|
|
- * @throws SchedulerException
|
|
|
*/
|
|
|
- public void updateJobCron(ScheduleJob scheduleJob) throws SchedulerException {
|
|
|
-
|
|
|
+ public void updateJobCron(ScheduleJobDO scheduleJob) throws SchedulerException {
|
|
|
TriggerKey triggerKey = TriggerKey.triggerKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
-
|
|
|
CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
|
|
-
|
|
|
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(scheduleJob.getCronExpression());
|
|
|
-
|
|
|
trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build();
|
|
|
-
|
|
|
scheduler.rescheduleJob(triggerKey, trigger);
|
|
|
}
|
|
|
}
|