From 27c06ce748648b13917290d74c9771b97c7bab29 Mon Sep 17 00:00:00 2001 From: diantu Date: Sat, 11 Mar 2023 10:59:40 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81=E8=A1=A5=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/mapper/BackupTaskMapper.java | 4 +- .../framework/utils/QuartzManagerUtils.java | 151 +++++++++--------- .../db/service/backup/BackupTaskService.java | 10 ++ .../backup/impl/BackupTaskServiceImpl.java | 49 ++++++ 4 files changed, 132 insertions(+), 82 deletions(-) create mode 100644 zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/BackupTaskService.java create mode 100644 zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/impl/BackupTaskServiceImpl.java diff --git a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/BackupTaskMapper.java b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/BackupTaskMapper.java index d0508016..30043c1d 100644 --- a/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/BackupTaskMapper.java +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/BackupTaskMapper.java @@ -4,9 +4,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.zyplayer.doc.data.repository.manage.entity.BackupTask; /** - *

- * Mapper 接口 - *

+ * 备份任务Mapper 接口 * * @author diantu * @since 2023-03-03 diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/utils/QuartzManagerUtils.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/utils/QuartzManagerUtils.java index b5010fde..ee725d79 100644 --- a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/utils/QuartzManagerUtils.java +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/utils/QuartzManagerUtils.java @@ -1,9 +1,8 @@ package com.zyplayer.doc.db.framework.utils; -import lombok.extern.slf4j.Slf4j; import org.quartz.*; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** @@ -12,10 +11,10 @@ import org.springframework.stereotype.Component; * @author diantu * @since 2023年3月8日 */ -@Slf4j -@Component public class QuartzManagerUtils { + private static Logger logger = LoggerFactory.getLogger(QuartzManagerUtils.class); + /** * 参数传递key */ @@ -26,109 +25,103 @@ public class QuartzManagerUtils { */ public static final String CLASS_NAME = "com.zyplayer.doc.db.framework.db.job.BackupJob"; - /** - * 程序调度器 - */ -// @Autowired -// private Scheduler scheduler; - /** * 添加定时任务 */ -// public void add(Integer id, String cronExpression, String param, Boolean status) { -// try { -// // 构建job信息 -// JobDetail jobDetail = JobBuilder.newJob(getClass(CLASS_NAME).getClass()).withIdentity(getKey(id)).usingJobData(PARAM_KEY, param).build(); -// // 表达式调度构建器(即任务执行的时间) -// CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); -// // 按新的cronExpression表达式构建一个新的trigger -// CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getKey(id)).withSchedule(scheduleBuilder).build(); -// // 创建定时任务 -// scheduler.scheduleJob(jobDetail, trigger); -// // 停止 -// if (!status) { -// stop(id); -// } -// } catch (Exception e) { -// log.error("添加定时任务失败:{}", e.getMessage()); -// } -// } + public static void add(Scheduler scheduler,Long id, String cronExpression, String param, Boolean status) { + try { + // 构建job信息 + JobDetail jobDetail = JobBuilder.newJob(getClass(CLASS_NAME).getClass()).withIdentity(getKey(id)).usingJobData(PARAM_KEY, param).build(); + // 表达式调度构建器(即任务执行的时间) + CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cronExpression); + // 按新的cronExpression表达式构建一个新的trigger + CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(getKey(id)).withSchedule(scheduleBuilder).build(); + // 创建定时任务 + scheduler.scheduleJob(jobDetail, trigger); + // 停止 + if (!status) { + stop(scheduler,id); + } + } catch (Exception e) { + logger.error("添加定时任务失败:{}", e.getMessage()); + } + } /** * 编辑定时任务 */ -// public void update(Integer id, String cronExpression, String param, Boolean status) { -// try { -// // 判断是否存在,存在先删除 -// if (scheduler.checkExists(JobKey.jobKey(getKey(id)))) { -// scheduler.deleteJob(JobKey.jobKey(getKey(id))); -// } -// // 再创建 -// add(id, cronExpression, param, status); -// } catch (Exception e) { -// log.error("修改定时任务失败:{}", e.getMessage()); -// } -// } + public void update(Scheduler scheduler,Long id, String cronExpression, String param, Boolean status) { + try { + // 判断是否存在,存在先删除 + if (scheduler.checkExists(JobKey.jobKey(getKey(id)))) { + scheduler.deleteJob(JobKey.jobKey(getKey(id))); + } + // 再创建 + add(scheduler,id, cronExpression, param, status); + } catch (Exception e) { + logger.error("修改定时任务失败:{}", e.getMessage()); + } + } /** * 暂停任务 */ -// public void stop(Integer id) { -// try { -// scheduler.pauseJob(JobKey.jobKey(getKey(id))); -// } catch (SchedulerException e) { -// // 暂停定时任务失败 -// log.error("暂停定时任务失败:{}", e.getMessage()); -// } -// } + public static void stop(Scheduler scheduler, Long id) { + try { + scheduler.pauseJob(JobKey.jobKey(getKey(id))); + } catch (SchedulerException e) { + // 暂停定时任务失败 + logger.error("暂停定时任务失败:{}", e.getMessage()); + } + } /** * 恢复任务 */ -// public void start(Integer id) { -// try { -// scheduler.resumeJob(JobKey.jobKey(getKey(id))); -// } catch (SchedulerException e) { -// // 暂停定时任务失败 -// log.error("启动定时任务失败:{}", e.getMessage()); -// } -// } + public void start(Scheduler scheduler,Long id) { + try { + scheduler.resumeJob(JobKey.jobKey(getKey(id))); + } catch (SchedulerException e) { + // 暂停定时任务失败 + logger.error("启动定时任务失败:{}", e.getMessage()); + } + } /** * 立即执行一次 */ -// public void run(Integer id) { -// try { -// scheduler.triggerJob(JobKey.jobKey(getKey(id))); -// } catch (SchedulerException e) { -// // 暂停定时任务失败 -// log.error("执行定时任务失败:{}", e.getMessage()); -// } -// } + public void run(Scheduler scheduler,Long id) { + try { + scheduler.triggerJob(JobKey.jobKey(getKey(id))); + } catch (SchedulerException e) { + // 暂停定时任务失败 + logger.error("执行定时任务失败:{}", e.getMessage()); + } + } /** * 删除定时任务 */ -// public void delete(Integer id) { -// try { -// // 停止触发器 -// scheduler.pauseTrigger(TriggerKey.triggerKey(getKey(id))); -// // 移除触发器 -// scheduler.unscheduleJob(TriggerKey.triggerKey(getKey(id))); -// // 删除任务 -// scheduler.deleteJob(JobKey.jobKey(getKey(id))); -// } catch (Exception e) { -// log.error("删除定时任务失败:{}", e.getMessage()); -// } -// } + public void delete(Scheduler scheduler,Long id) { + try { + // 停止触发器 + scheduler.pauseTrigger(TriggerKey.triggerKey(getKey(id))); + // 移除触发器 + scheduler.unscheduleJob(TriggerKey.triggerKey(getKey(id))); + // 删除任务 + scheduler.deleteJob(JobKey.jobKey(getKey(id))); + } catch (Exception e) { + logger.error("删除定时任务失败:{}", e.getMessage()); + } + } /** * 根据类名获取类 */ - private Job getClass(String className) throws Exception { + private static Job getClass(String className) throws Exception { Class class1 = Class.forName(className); return (Job) class1.newInstance(); } @@ -136,7 +129,7 @@ public class QuartzManagerUtils { /** * 拼接key */ - public String getKey(Integer id) { + public static String getKey(Long id) { return "dbBackUp-" + id; } } diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/BackupTaskService.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/BackupTaskService.java new file mode 100644 index 00000000..7da2b512 --- /dev/null +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/BackupTaskService.java @@ -0,0 +1,10 @@ +package com.zyplayer.doc.db.service.backup; + +/** + * 备份任务 + * + * @author diantu + * @since 2023年3月8日 + */ +public interface BackupTaskService { +} diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/impl/BackupTaskServiceImpl.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/impl/BackupTaskServiceImpl.java new file mode 100644 index 00000000..e083c272 --- /dev/null +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/service/backup/impl/BackupTaskServiceImpl.java @@ -0,0 +1,49 @@ +package com.zyplayer.doc.db.service.backup.impl; + +import cn.hutool.core.collection.CollectionUtil; +import com.alibaba.fastjson.JSON; +import com.zyplayer.doc.data.repository.manage.entity.BackupTask; +import com.zyplayer.doc.data.repository.manage.mapper.BackupTaskMapper; +import com.zyplayer.doc.db.framework.utils.QuartzManagerUtils; +import com.zyplayer.doc.db.service.backup.BackupTaskService; +import org.quartz.Scheduler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import javax.annotation.PostConstruct; +import java.util.List; + +/** + * 备份任务实现 + * + * @author diantu + * @since 2023年3月8日 + */ +public class BackupTaskServiceImpl implements BackupTaskService { + + private static Logger logger = LoggerFactory.getLogger(BackupTaskServiceImpl.class); + + @Autowired + private Scheduler scheduler; + + @Autowired + private BackupTaskMapper backupTaskMapper; + + /** + * 系统启动执行 + */ + @PostConstruct + public void init() { + List list = backupTaskMapper.selectList(null); + if (CollectionUtil.isNotEmpty(list)) { + for (BackupTask item : list) { + try { + QuartzManagerUtils.add(scheduler,item.getId(), item.getCron(), JSON.toJSONString(item.getParam()), item.getStatus()); + } catch (Exception e) { + logger.error(e.getMessage()); + } + } + } + } + +}