diff --git a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java index 41d8d7eb..9e6052dd 100644 --- a/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/jero-boot/jero-boot-module-system/src/main/java/com/jero/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -27,156 +27,155 @@ import org.springframework.transaction.annotation.Transactional; @Slf4j @Service public class QuartzJobServiceImpl extends ServiceImpl implements IQuartzJobService { - @Autowired - private QuartzJobMapper quartzJobMapper; - @Autowired - private Scheduler scheduler; + @Autowired + private QuartzJobMapper quartzJobMapper; + @Autowired + private Scheduler scheduler; - /** - * 立即执行的任务分组 - */ - private static final String JOB_TEST_GROUP = "test_group"; + /** + * 立即执行的任务分组 + */ + private static final String JOB_TEST_GROUP = "test_group"; - @Override - public List findByJobClassName(String jobClassName) { - return quartzJobMapper.findByJobClassName(jobClassName); - } + @Override + public List findByJobClassName(String jobClassName) { + return quartzJobMapper.findByJobClassName(jobClassName); + } - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean saveAndScheduleJob(QuartzJob quartzJob) { - // DB设置修改 - quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); - boolean success = this.save(quartzJob); - if (success) { - if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { - // 定时器添加 - this.schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - } - } - return success; - } + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean saveAndScheduleJob(QuartzJob quartzJob) { + // DB设置修改 + quartzJob.setDelFlag(CommonConstant.DEL_FLAG_0); + boolean success = this.save(quartzJob); + if (success && CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + // 定时器添加 + this.schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } + return success; + } - /** - * 恢复定时任务 - */ - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean resumeJob(QuartzJob quartzJob) { - schedulerDelete(quartzJob.getId()); - schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - quartzJob.setStatus(CommonConstant.STATUS_NORMAL); - return this.updateById(quartzJob); - } + /** + * 恢复定时任务 + */ + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean resumeJob(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getId()); + schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + quartzJob.setStatus(CommonConstant.STATUS_NORMAL); + return this.updateById(quartzJob); + } - /** - * 编辑&启停定时任务 - * @throws SchedulerException - */ - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { - if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { - schedulerDelete(quartzJob.getId()); - schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); - }else{ - scheduler.pauseJob(JobKey.jobKey(quartzJob.getId())); - } - return this.updateById(quartzJob); - } + /** + * 编辑&启停定时任务 + * + * @throws SchedulerException + */ + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean editAndScheduleJob(QuartzJob quartzJob) throws SchedulerException { + if (CommonConstant.STATUS_NORMAL.equals(quartzJob.getStatus())) { + schedulerDelete(quartzJob.getId()); + schedulerAdd(quartzJob.getId(), quartzJob.getJobClassName().trim(), quartzJob.getCronExpression().trim(), quartzJob.getParameter()); + } else { + scheduler.pauseJob(JobKey.jobKey(quartzJob.getId())); + } + return this.updateById(quartzJob); + } - /** - * 删除&停止删除定时任务 - */ - @Override - @Transactional(rollbackFor = JeroBootException.class) - public boolean deleteAndStopJob(QuartzJob job) { - schedulerDelete(job.getId()); - boolean ok = this.removeById(job.getId()); - return ok; - } + /** + * 删除&停止删除定时任务 + */ + @Override + @Transactional(rollbackFor = JeroBootException.class) + public boolean deleteAndStopJob(QuartzJob job) { + schedulerDelete(job.getId()); +// boolean ok = this.removeById(job.getId()); + return this.removeById(job.getId()); + } - @Override - public void execute(QuartzJob quartzJob) throws Exception { - String jobName = quartzJob.getJobClassName().trim(); - Date startDate = new Date(); - String ymd = DateUtils.date2Str(startDate,DateUtils.yyyymmddhhmmss.get()); - String identity = jobName + ymd; - //3秒后执行 只执行一次 - // update-begin--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- - startDate.setTime(startDate.getTime() + 100L); - // update-end--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- - // 定义一个Trigger - SimpleTrigger trigger = (SimpleTrigger)TriggerBuilder.newTrigger() - .withIdentity(identity, JOB_TEST_GROUP) - .startAt(startDate) - .build(); - // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); - // 将trigger和 jobDetail 加入这个调度 - scheduler.scheduleJob(jobDetail, trigger); - // 启动scheduler - scheduler.start(); - } + @Override + public void execute(QuartzJob quartzJob) throws Exception { + String jobName = quartzJob.getJobClassName().trim(); + Date startDate = new Date(); + String ymd = DateUtils.date2Str(startDate, DateUtils.yyyymmddhhmmss.get()); + String identity = jobName + ymd; + //3秒后执行 只执行一次 + // update-begin--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- + startDate.setTime(startDate.getTime() + 100L); + // update-end--author:sunjianlei ---- date:20210511--- for:定时任务立即执行,延迟3秒改成0.1秒------- + // 定义一个Trigger + SimpleTrigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger() + .withIdentity(identity, JOB_TEST_GROUP) + .startAt(startDate) + .build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobName).getClass()).withIdentity(identity).usingJobData("parameter", quartzJob.getParameter()).build(); + // 将trigger和 jobDetail 加入这个调度 + scheduler.scheduleJob(jobDetail, trigger); + // 启动scheduler + scheduler.start(); + } - @Override - @Transactional(rollbackFor = JeroBootException.class) - public void pause(QuartzJob quartzJob){ - schedulerDelete(quartzJob.getId()); - quartzJob.setStatus(CommonConstant.STATUS_DISABLE); - this.updateById(quartzJob); - } + @Override + @Transactional(rollbackFor = JeroBootException.class) + public void pause(QuartzJob quartzJob) { + schedulerDelete(quartzJob.getId()); + quartzJob.setStatus(CommonConstant.STATUS_DISABLE); + this.updateById(quartzJob); + } - /** - * 添加定时任务 - * - * @param jobClassName - * @param cronExpression - * @param parameter - */ - private void schedulerAdd(String id, String jobClassName, String cronExpression, String parameter) { - try { - // 启动调度器 - scheduler.start(); + /** + * 添加定时任务 + * + * @param jobClassName + * @param cronExpression + * @param parameter + */ + private void schedulerAdd(String id, String jobClassName, String cronExpression, String parameter) { + try { + // 启动调度器 + scheduler.start(); - // 构建job信息 - JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(id).usingJobData("parameter", parameter).build(); + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(jobClassName).getClass()).withIdentity(id).usingJobData("parameter", parameter).build(); - // 表达式调度构建器(即任务执行的时间) - CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + // 表达式调度构建器(即任务执行的时间) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); - // 按新的cronExpression表达式构建一个新的trigger - CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(id).withSchedule(scheduleBuilder).build(); + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(id).withSchedule(scheduleBuilder).build(); - scheduler.scheduleJob(jobDetail, trigger); - } catch (SchedulerException e) { - throw new JeroBootException("创建定时任务失败", e); - } catch (RuntimeException e) { - throw new JeroBootException(e.getMessage(), e); - }catch (Exception e) { - throw new JeroBootException("后台找不到该类名:" + jobClassName, e); - } - } + scheduler.scheduleJob(jobDetail, trigger); + } catch (SchedulerException e) { + throw new JeroBootException("创建定时任务失败", e); + } catch (RuntimeException e) { + throw new JeroBootException(e.getMessage(), e); + } catch (Exception e) { + throw new JeroBootException("后台找不到该类名:" + jobClassName, e); + } + } - /** - * 删除定时任务 - * - * @param id - */ - private void schedulerDelete(String id) { - try { - scheduler.pauseTrigger(TriggerKey.triggerKey(id)); - scheduler.unscheduleJob(TriggerKey.triggerKey(id)); - scheduler.deleteJob(JobKey.jobKey(id)); - } catch (Exception e) { - log.error(e.getMessage(), e); - throw new JeroBootException("删除定时任务失败"); - } - } + /** + * 删除定时任务 + * + * @param id + */ + private void schedulerDelete(String id) { + try { + scheduler.pauseTrigger(TriggerKey.triggerKey(id)); + scheduler.unscheduleJob(TriggerKey.triggerKey(id)); + scheduler.deleteJob(JobKey.jobKey(id)); + } catch (Exception e) { + log.error(e.getMessage(), e); + throw new JeroBootException("删除定时任务失败"); + } + } - private static Job getClass(String classname) throws Exception { - Class class1 = Class.forName(classname); - return (Job) class1.newInstance(); - } + private static Job getClass(String classname) throws Exception { + Class class1 = Class.forName(classname); + return (Job) class1.newInstance(); + } }