From 79c73438da5765de29a6ccb0745350519319054e Mon Sep 17 00:00:00 2001 From: diantu Date: Thu, 9 Mar 2023 18:17:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E7=B1=BB=E6=9A=82=E6=97=B6=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../manage/mapper/BackupTaskMapper.java | 16 +++ .../configuration/async/AsyncConfigurer.java | 45 ++++++ .../framework/utils/QuartzManagerUtils.java | 136 +++++++++--------- 3 files changed, 129 insertions(+), 68 deletions(-) create mode 100644 zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/BackupTaskMapper.java create mode 100644 zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/async/AsyncConfigurer.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 new file mode 100644 index 00000000..d0508016 --- /dev/null +++ b/zyplayer-doc-data/src/main/java/com/zyplayer/doc/data/repository/manage/mapper/BackupTaskMapper.java @@ -0,0 +1,16 @@ +package com.zyplayer.doc.data.repository.manage.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.zyplayer.doc.data.repository.manage.entity.BackupTask; + +/** + *

+ * Mapper 接口 + *

+ * + * @author diantu + * @since 2023-03-03 + */ +public interface BackupTaskMapper extends BaseMapper { + +} diff --git a/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/async/AsyncConfigurer.java b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/async/AsyncConfigurer.java new file mode 100644 index 00000000..756d75ec --- /dev/null +++ b/zyplayer-doc-db/src/main/java/com/zyplayer/doc/db/framework/configuration/async/AsyncConfigurer.java @@ -0,0 +1,45 @@ +package com.zyplayer.doc.db.framework.configuration.async; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.task.TaskExecutor; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +/** + * 异步线程核心配置类 + * + * @author diantu + * @since 2023年3月3日 + */ +@EnableAsync +@Configuration +public class AsyncConfigurer { + + /** + * 核心线程数 = cpu 核心数 + 1 + */ + private final int CORE = Runtime.getRuntime().availableProcessors() + 1; + + @Bean(name = "myTaskExecutor") + public TaskExecutor taskExecutor() { + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + // 核心线程数:线程池创建时候初始化的线程数 + executor.setCorePoolSize(CORE); + // 最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程 + executor.setMaxPoolSize(CORE * 2); + // 缓冲队列:用来缓冲执行任务的队列 + executor.setQueueCapacity(300); + // 允许线程的空闲时间60秒:当超过了核心线程之外的线程在空闲时间到达之后会被销毁 + executor.setKeepAliveSeconds(60); + // 线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池 + executor.setThreadNamePrefix("AsyncExecutor-"); + // 缓冲队列满了之后的拒绝策略:不在新线程中执行任务,而是有调用者所在的线程来执行 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 初始化 + executor.initialize(); + return executor; + } +} 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 5a523a12..b5010fde 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 @@ -29,8 +29,8 @@ public class QuartzManagerUtils { /** * 程序调度器 */ - @Autowired - private Scheduler scheduler; +// @Autowired +// private Scheduler scheduler; @@ -38,92 +38,92 @@ public class QuartzManagerUtils { /** * 添加定时任务 */ - 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 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 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(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 stop(Integer id) { - try { - scheduler.pauseJob(JobKey.jobKey(getKey(id))); - } catch (SchedulerException e) { - // 暂停定时任务失败 - log.error("暂停定时任务失败:{}", e.getMessage()); - } - } +// public void stop(Integer id) { +// try { +// scheduler.pauseJob(JobKey.jobKey(getKey(id))); +// } catch (SchedulerException e) { +// // 暂停定时任务失败 +// log.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(Integer id) { +// try { +// scheduler.resumeJob(JobKey.jobKey(getKey(id))); +// } catch (SchedulerException e) { +// // 暂停定时任务失败 +// log.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(Integer id) { +// try { +// scheduler.triggerJob(JobKey.jobKey(getKey(id))); +// } catch (SchedulerException e) { +// // 暂停定时任务失败 +// log.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(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()); +// } +// } /** * 根据类名获取类