【fix sonar】 QuartzJobServiceImpl.java 文件

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