|
@@ -1,21 +1,8 @@
|
|
|
package cn.com.qmth.examcloud.web.task;
|
|
|
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Set;
|
|
|
-
|
|
|
-import org.quartz.CronScheduleBuilder;
|
|
|
-import org.quartz.CronTrigger;
|
|
|
-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 cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException;
|
|
|
+import cn.com.qmth.examcloud.commons.util.JsonUtil;
|
|
|
+import org.quartz.*;
|
|
|
import org.quartz.impl.matchers.GroupMatcher;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
@@ -23,8 +10,9 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.scheduling.quartz.SchedulerFactoryBean;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
-import cn.com.qmth.examcloud.commons.exception.ExamCloudRuntimeException;
|
|
|
-import cn.com.qmth.examcloud.commons.util.JsonUtil;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Set;
|
|
|
|
|
|
/**
|
|
|
* Quartz 管理器
|
|
@@ -35,228 +23,230 @@ import cn.com.qmth.examcloud.commons.util.JsonUtil;
|
|
|
*/
|
|
|
@Component
|
|
|
public class QuartzManager {
|
|
|
- private static final Logger LOG = LoggerFactory.getLogger(QuartzManager.class);
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private SchedulerFactoryBean schedulerFactoryBean;
|
|
|
-
|
|
|
- /**
|
|
|
- * 添加任务
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @param job
|
|
|
- */
|
|
|
- public void addJob(ScheduleJob job) {
|
|
|
- if (LOG.isDebugEnabled()) {
|
|
|
- LOG.debug("add a job. job detail: " + JsonUtil.toJson(job));
|
|
|
- }
|
|
|
-
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
|
|
|
-
|
|
|
- CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
|
|
-
|
|
|
- if (null == trigger) {
|
|
|
- Class<? extends Job> jobClass = job.isStateful()
|
|
|
- ? StatefulDistributionJob.class
|
|
|
- : DistributionJob.class;
|
|
|
- JobDetail jobDetail = JobBuilder.newJob(jobClass)
|
|
|
- .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 {
|
|
|
- CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
|
|
|
- .cronSchedule(job.getCronExpression());
|
|
|
-
|
|
|
- trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
|
|
|
- .withSchedule(scheduleBuilder).build();
|
|
|
-
|
|
|
- scheduler.rescheduleJob(triggerKey, trigger);
|
|
|
- }
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to add a job. job detail: " + JsonUtil.toJson(job), e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
-
|
|
|
- if (LOG.isDebugEnabled()) {
|
|
|
- LOG.debug("add a job successfully. job detail: " + JsonUtil.toJson(job));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 获取所有计划中的任务列表
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @return
|
|
|
- */
|
|
|
- public List<ScheduleJob> getAllJobs() {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
|
|
|
- Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
|
|
|
- List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();
|
|
|
- for (JobKey jobKey : jobKeys) {
|
|
|
- List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
|
|
|
- for (Trigger trigger : triggers) {
|
|
|
- ScheduleJob job = new ScheduleJob();
|
|
|
- job.setJobName(jobKey.getName());
|
|
|
- job.setJobGroup(jobKey.getGroup());
|
|
|
- Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
|
|
|
- job.setTriggerState(triggerState.name());
|
|
|
- if (trigger instanceof CronTrigger) {
|
|
|
- CronTrigger cronTrigger = (CronTrigger) trigger;
|
|
|
- String cronExpression = cronTrigger.getCronExpression();
|
|
|
- job.setCronExpression(cronExpression);
|
|
|
- }
|
|
|
- jobList.add(job);
|
|
|
- }
|
|
|
- }
|
|
|
- return jobList;
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to get all jobs.", e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 所有正在运行的job
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @return
|
|
|
- */
|
|
|
- public List<ScheduleJob> getRunningJobs() {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();
|
|
|
- List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());
|
|
|
- for (JobExecutionContext context : executingJobs) {
|
|
|
- ScheduleJob job = new ScheduleJob();
|
|
|
- JobDetail jobDetail = context.getJobDetail();
|
|
|
- JobKey jobKey = jobDetail.getKey();
|
|
|
- Trigger trigger = context.getTrigger();
|
|
|
- job.setJobName(jobKey.getName());
|
|
|
- job.setJobGroup(jobKey.getGroup());
|
|
|
- Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
|
|
|
- job.setTriggerState(triggerState.name());
|
|
|
- if (trigger instanceof CronTrigger) {
|
|
|
- CronTrigger cronTrigger = (CronTrigger) trigger;
|
|
|
- String cronExpression = cronTrigger.getCronExpression();
|
|
|
- job.setCronExpression(cronExpression);
|
|
|
- }
|
|
|
- jobList.add(job);
|
|
|
- }
|
|
|
- return jobList;
|
|
|
- } catch (Exception e) {
|
|
|
- LOG.error("Fail to get running jobs.", e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 暂停一个job
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @param scheduleJob
|
|
|
- */
|
|
|
- public void pauseJob(ScheduleJob scheduleJob) {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
- scheduler.pauseJob(jobKey);
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to pause Job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 恢复一个job
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @param scheduleJob
|
|
|
- */
|
|
|
- public void resumeJob(ScheduleJob scheduleJob) {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
- scheduler.resumeJob(jobKey);
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to resume job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 删除一个job
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @param scheduleJob
|
|
|
- */
|
|
|
- public void deleteJob(ScheduleJob scheduleJob) {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
- scheduler.deleteJob(jobKey);
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to delete job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 执行job
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @param scheduleJob
|
|
|
- */
|
|
|
- public void runJob(ScheduleJob scheduleJob) {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
- JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
- scheduler.triggerJob(jobKey);
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to run job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * 更新job时间表达式
|
|
|
- *
|
|
|
- * @author WANGWEI
|
|
|
- * @param scheduleJob
|
|
|
- */
|
|
|
- public void updateJobCronExpression(ScheduleJob scheduleJob) {
|
|
|
- try {
|
|
|
- Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
-
|
|
|
- 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);
|
|
|
- } catch (SchedulerException e) {
|
|
|
- LOG.error("Fail to update job cron expression. job detail :"
|
|
|
- + JsonUtil.toJson(scheduleJob), e);
|
|
|
- throw new ExamCloudRuntimeException(e);
|
|
|
- }
|
|
|
- }
|
|
|
-}
|
|
|
+ private static final Logger LOG = LoggerFactory.getLogger(QuartzManager.class);
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SchedulerFactoryBean schedulerFactoryBean;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 添加任务
|
|
|
+ *
|
|
|
+ * @param job
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public void addJob(ScheduleJob job) {
|
|
|
+ if (LOG.isInfoEnabled()) {
|
|
|
+ LOG.info("addJob detail: " + JsonUtil.toJson(job));
|
|
|
+ }
|
|
|
+
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ TriggerKey triggerKey = TriggerKey.triggerKey(job.getJobName(), job.getJobGroup());
|
|
|
+
|
|
|
+ CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey);
|
|
|
+
|
|
|
+ if (null == trigger) {
|
|
|
+ Class<? extends Job> jobClass = job.isStateful()
|
|
|
+ ? StatefulDistributionJob.class
|
|
|
+ : DistributionJob.class;
|
|
|
+ JobDetail jobDetail = JobBuilder.newJob(jobClass)
|
|
|
+ .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 {
|
|
|
+ CronScheduleBuilder scheduleBuilder = CronScheduleBuilder
|
|
|
+ .cronSchedule(job.getCronExpression());
|
|
|
+
|
|
|
+ trigger = trigger.getTriggerBuilder().withIdentity(triggerKey)
|
|
|
+ .withSchedule(scheduleBuilder).build();
|
|
|
+
|
|
|
+ scheduler.rescheduleJob(triggerKey, trigger);
|
|
|
+ }
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("addJob fail, detail: " + JsonUtil.toJson(job), e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (LOG.isDebugEnabled()) {
|
|
|
+ LOG.debug("addJob successfully, detail: " + JsonUtil.toJson(job));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取所有计划中的任务列表
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public List<ScheduleJob> getAllJobs() {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
|
|
|
+ Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
|
|
|
+ List<ScheduleJob> jobList = new ArrayList<ScheduleJob>();
|
|
|
+ for (JobKey jobKey : jobKeys) {
|
|
|
+ List<? extends Trigger> triggers = scheduler.getTriggersOfJob(jobKey);
|
|
|
+ for (Trigger trigger : triggers) {
|
|
|
+ ScheduleJob job = new ScheduleJob();
|
|
|
+ job.setJobName(jobKey.getName());
|
|
|
+ job.setJobGroup(jobKey.getGroup());
|
|
|
+ Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
|
|
|
+ job.setTriggerState(triggerState.name());
|
|
|
+ if (trigger instanceof CronTrigger) {
|
|
|
+ CronTrigger cronTrigger = (CronTrigger) trigger;
|
|
|
+ String cronExpression = cronTrigger.getCronExpression();
|
|
|
+ job.setCronExpression(cronExpression);
|
|
|
+ }
|
|
|
+ jobList.add(job);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return jobList;
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("Fail to get all jobs.", e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 所有正在运行的job
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public List<ScheduleJob> getRunningJobs() {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ List<JobExecutionContext> executingJobs = scheduler.getCurrentlyExecutingJobs();
|
|
|
+ List<ScheduleJob> jobList = new ArrayList<ScheduleJob>(executingJobs.size());
|
|
|
+ for (JobExecutionContext context : executingJobs) {
|
|
|
+ ScheduleJob job = new ScheduleJob();
|
|
|
+ JobDetail jobDetail = context.getJobDetail();
|
|
|
+ JobKey jobKey = jobDetail.getKey();
|
|
|
+ Trigger trigger = context.getTrigger();
|
|
|
+ job.setJobName(jobKey.getName());
|
|
|
+ job.setJobGroup(jobKey.getGroup());
|
|
|
+ Trigger.TriggerState triggerState = scheduler.getTriggerState(trigger.getKey());
|
|
|
+ job.setTriggerState(triggerState.name());
|
|
|
+ if (trigger instanceof CronTrigger) {
|
|
|
+ CronTrigger cronTrigger = (CronTrigger) trigger;
|
|
|
+ String cronExpression = cronTrigger.getCronExpression();
|
|
|
+ job.setCronExpression(cronExpression);
|
|
|
+ }
|
|
|
+ jobList.add(job);
|
|
|
+ }
|
|
|
+ return jobList;
|
|
|
+ } catch (Exception e) {
|
|
|
+ LOG.error("Fail to get running jobs.", e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 暂停一个job
|
|
|
+ *
|
|
|
+ * @param scheduleJob
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public void pauseJob(ScheduleJob scheduleJob) {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
+ scheduler.pauseJob(jobKey);
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("Fail to pause Job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 恢复一个job
|
|
|
+ *
|
|
|
+ * @param scheduleJob
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public void resumeJob(ScheduleJob scheduleJob) {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
+ scheduler.resumeJob(jobKey);
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("Fail to resume job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 删除一个job
|
|
|
+ *
|
|
|
+ * @param scheduleJob
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public void deleteJob(ScheduleJob scheduleJob) {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
+ scheduler.deleteJob(jobKey);
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("Fail to delete job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 执行job
|
|
|
+ *
|
|
|
+ * @param scheduleJob
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public void runJob(ScheduleJob scheduleJob) {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+ JobKey jobKey = JobKey.jobKey(scheduleJob.getJobName(), scheduleJob.getJobGroup());
|
|
|
+ scheduler.triggerJob(jobKey);
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("Fail to run job. job detail: " + JsonUtil.toJson(scheduleJob), e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 更新job时间表达式
|
|
|
+ *
|
|
|
+ * @param scheduleJob
|
|
|
+ * @author WANGWEI
|
|
|
+ */
|
|
|
+ public void updateJobCronExpression(ScheduleJob scheduleJob) {
|
|
|
+ try {
|
|
|
+ Scheduler scheduler = schedulerFactoryBean.getScheduler();
|
|
|
+
|
|
|
+ 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);
|
|
|
+ } catch (SchedulerException e) {
|
|
|
+ LOG.error("Fail to update job cron expression. job detail :"
|
|
|
+ + JsonUtil.toJson(scheduleJob), e);
|
|
|
+ throw new ExamCloudRuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|