| ¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.sandu.common.quartz.service; |
| | | |
| | | import com.sandu.common.execption.BusinessException; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.quartz.*; |
| | | import org.quartz.impl.triggers.CronTriggerImpl; |
| | | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
| | | import org.springframework.scheduling.quartz.QuartzJobBean; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.util.Date; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * @author chenjiantian |
| | | * @date 2021/12/15 10:39 |
| | | * quartz job管çç±» |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | @ConditionalOnProperty(prefix = "sandu.quartz", name = "enable", havingValue = "true") |
| | | public class QuartzServiceImpl implements QuartzService { |
| | | |
| | | @Resource(name = "scheduler") |
| | | private Scheduler scheduler; |
| | | |
| | | @Override |
| | | public void addJob(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) { |
| | | try { |
| | | String simpleName = jobClass.getSimpleName(); |
| | | JobDetail jobDetail = JobBuilder.newJob(jobClass) |
| | | .withIdentity(simpleName + jobId) |
| | | .build(); |
| | | CronTrigger cronTrigger = TriggerBuilder.newTrigger() |
| | | .withIdentity(simpleName + jobId) |
| | | .startNow() |
| | | .withSchedule(CronScheduleBuilder.cronSchedule(cron)) |
| | | .build(); |
| | | cronTrigger.getJobDataMap().putAll(jobData); |
| | | ((CronTriggerImpl) cronTrigger).setStartTime(new Date()); |
| | | scheduler.scheduleJob(jobDetail, cronTrigger); |
| | | |
| | | log.info("æ·»å 宿¶å¨{}", simpleName + jobId); |
| | | } catch (SchedulerException e) { |
| | | log.error("åå»ºå®æ¶ä»»å¡å¤±è´¥", e); |
| | | throw new BusinessException("åå»ºå®æ¶ä»»å¡å¤±è´¥"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void updateJobCron(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) { |
| | | try { |
| | | TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + jobId); |
| | | CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); |
| | | if (trigger == null) { |
| | | addJob(jobClass, jobId, cron, jobData); |
| | | trigger = (CronTrigger) scheduler.getTrigger(triggerKey); |
| | | } |
| | | CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron); |
| | | trigger = trigger.getTriggerBuilder().withIdentity(triggerKey).withSchedule(scheduleBuilder).build(); |
| | | trigger.getJobDataMap().putAll(jobData); |
| | | |
| | | scheduler.rescheduleJob(triggerKey, trigger); |
| | | } catch (SchedulerException e) { |
| | | log.error("æ´æ°å®æ¶ä»»å¡å¤±è´¥", e); |
| | | throw new BusinessException("æ´æ°å®æ¶ä»»å¡å¤±è´¥"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void deleteJob(Class<? extends QuartzJobBean> jobClass, Long jobId) { |
| | | try { |
| | | JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId); |
| | | scheduler.pauseJob(jobKey); |
| | | scheduler.deleteJob(jobKey); |
| | | log.info("å é¤å®æ¶å¨{}", jobClass.getSimpleName() + jobId); |
| | | } catch (SchedulerException e) { |
| | | log.error("å é¤å®æ¶ä»»å¡å¤±è´¥", e); |
| | | throw new BusinessException("å é¤å®æ¶ä»»å¡å¤±è´¥"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void pauseJob(Class<? extends QuartzJobBean> jobClass, Long jobId) { |
| | | try { |
| | | JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId); |
| | | scheduler.pauseJob(jobKey); |
| | | } catch (Exception e) { |
| | | log.error("宿¶ä»»å¡æå失败", e); |
| | | throw new BusinessException("宿¶ä»»å¡æå失败"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void resumeJob(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) { |
| | | try { |
| | | TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + jobId); |
| | | CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); |
| | | // 妿ä¸åå¨åå建ä¸ä¸ªå®æ¶ä»»å¡ |
| | | if (trigger == null) { |
| | | addJob(jobClass, jobId, cron, jobData); |
| | | } |
| | | JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId); |
| | | scheduler.resumeJob(jobKey); |
| | | } catch (Exception e) { |
| | | log.error("æ¢å¤å®æ¶ä»»å¡å¤±è´¥", e); |
| | | throw new BusinessException("æ¢å¤å®æ¶ä»»å¡å¤±è´¥"); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void runJobNow(Class<? extends QuartzJobBean> jobClass, Long jobId, String cron, Map<String, Object> jobData) { |
| | | try { |
| | | TriggerKey triggerKey = TriggerKey.triggerKey(jobClass.getSimpleName() + jobId); |
| | | CronTrigger trigger = (CronTrigger) scheduler.getTrigger(triggerKey); |
| | | // 妿ä¸åå¨åå建ä¸ä¸ªå®æ¶ä»»å¡ |
| | | if (trigger == null) { |
| | | addJob(jobClass, jobId, cron, jobData); |
| | | } |
| | | JobDataMap dataMap = new JobDataMap(); |
| | | dataMap.putAll(jobData); |
| | | JobKey jobKey = JobKey.jobKey(jobClass.getSimpleName() + jobId); |
| | | scheduler.triggerJob(jobKey, dataMap); |
| | | } catch (Exception e) { |
| | | log.error("宿¶ä»»å¡æ§è¡å¤±è´¥", e); |
| | | throw new BusinessException("宿¶ä»»å¡æ§è¡å¤±è´¥"); |
| | | } |
| | | } |
| | | } |