From 998d0a53c821cef86da23eb309419da1cd40a491 Mon Sep 17 00:00:00 2001 From: mxd <838425805@qq.com> Date: Thu, 27 Jan 2022 19:55:45 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9A=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/TaskMagicDynamicRegistry.java | 34 +++---- .../starter/MagicAPITaskConfiguration.java | 25 ++++-- .../task/starter/MagicTaskConfig.java | 88 +++++++++++++++++++ 3 files changed, 125 insertions(+), 22 deletions(-) create mode 100644 magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicTaskConfig.java diff --git a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java index 2c90cb15..2140d901 100644 --- a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java +++ b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/service/TaskMagicDynamicRegistry.java @@ -46,24 +46,24 @@ public class TaskMagicDynamicRegistry extends AbstractMagicDynamicRegistry mappingNode) { TaskInfo info = mappingNode.getEntity(); - CronTask cronTask = new CronTask(() -> { - TaskInfo entity = mappingNode.getEntity(); - String scriptName = MagicConfiguration.getMagicResourceService().getScriptName(entity); - if(entity.isEnabled()){ - try { - logger.info("定时任务:[{}]开始执行", scriptName); - MagicScriptContext magicScriptContext = new MagicScriptContext(); - magicScriptContext.setScriptName(scriptName); - ScriptManager.executeScript(entity.getScript(), magicScriptContext); - } catch (Exception e) { - logger.error("定时任务执行出错", e); - } finally { - logger.info("定时任务:[{}]执行完毕", scriptName); - } - } - }, info.getCron()); - mappingNode.setMappingData(taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger())); if(taskScheduler != null){ + CronTask cronTask = new CronTask(() -> { + TaskInfo entity = mappingNode.getEntity(); + String scriptName = MagicConfiguration.getMagicResourceService().getScriptName(entity); + if(entity.isEnabled()){ + try { + logger.info("定时任务:[{}]开始执行", scriptName); + MagicScriptContext magicScriptContext = new MagicScriptContext(); + magicScriptContext.setScriptName(scriptName); + ScriptManager.executeScript(entity.getScript(), magicScriptContext); + } catch (Exception e) { + logger.error("定时任务执行出错", e); + } finally { + logger.info("定时任务:[{}]执行完毕", scriptName); + } + } + }, info.getCron()); + mappingNode.setMappingData(taskScheduler.schedule(cronTask.getRunnable(), cronTask.getTrigger())); logger.debug("注册定时任务:[{},{}]", MagicConfiguration.getMagicResourceService().getScriptName(info), info.getCron()); } else { logger.debug("注册定时任务失败:[{}, {}], 当前 TaskScheduler 为空", MagicConfiguration.getMagicResourceService().getScriptName(info), info.getCron()); diff --git a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicAPITaskConfiguration.java b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicAPITaskConfiguration.java index 59d8a550..7967011c 100644 --- a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicAPITaskConfiguration.java +++ b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicAPITaskConfiguration.java @@ -1,10 +1,10 @@ package org.ssssssss.magicapi.task.starter; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.scheduling.TaskScheduler; -import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; import org.ssssssss.magicapi.core.config.MagicPluginConfiguration; import org.ssssssss.magicapi.core.model.Plugin; import org.ssssssss.magicapi.core.web.MagicControllerRegister; @@ -13,9 +13,15 @@ import org.ssssssss.magicapi.task.service.TaskMagicDynamicRegistry; import org.ssssssss.magicapi.task.web.MagicTaskController; @Configuration -@EnableScheduling +@EnableConfigurationProperties(MagicTaskConfig.class) public class MagicAPITaskConfiguration implements MagicPluginConfiguration { + private final MagicTaskConfig config; + + public MagicAPITaskConfiguration(MagicTaskConfig config) { + this.config = config; + } + @Bean @ConditionalOnMissingBean public TaskInfoMagicResourceStorage taskInfoMagicResourceStorage() { @@ -24,8 +30,17 @@ public class MagicAPITaskConfiguration implements MagicPluginConfiguration { @Bean @ConditionalOnMissingBean - public TaskMagicDynamicRegistry taskMagicDynamicRegistry(TaskInfoMagicResourceStorage taskInfoMagicResourceStorage, TaskScheduler taskScheduler) { - return new TaskMagicDynamicRegistry(taskInfoMagicResourceStorage, taskScheduler); + public TaskMagicDynamicRegistry taskMagicDynamicRegistry(TaskInfoMagicResourceStorage taskInfoMagicResourceStorage) { + MagicTaskConfig.Shutdown shutdown = config.getShutdown(); + ThreadPoolTaskScheduler poolTaskScheduler = new ThreadPoolTaskScheduler(); + poolTaskScheduler.setPoolSize(config.getPool().getSize()); + poolTaskScheduler.setWaitForTasksToCompleteOnShutdown(shutdown.isAwaitTermination()); + if(shutdown.getAwaitTerminationPeriod() != null){ + poolTaskScheduler.setAwaitTerminationSeconds((int) shutdown.getAwaitTerminationPeriod().getSeconds()); + } + poolTaskScheduler.setThreadNamePrefix(config.getThreadNamePrefix()); + poolTaskScheduler.initialize(); + return new TaskMagicDynamicRegistry(taskInfoMagicResourceStorage, poolTaskScheduler); } @Override diff --git a/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicTaskConfig.java b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicTaskConfig.java new file mode 100644 index 00000000..5470f40c --- /dev/null +++ b/magic-api-plugins/magic-api-plugin-task/src/main/java/org/ssssssss/magicapi/task/starter/MagicTaskConfig.java @@ -0,0 +1,88 @@ +package org.ssssssss.magicapi.task.starter; + + +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.time.Duration; + +@ConfigurationProperties("magic-api.task") +public class MagicTaskConfig { + + /** + * 线程池相关配置 + */ + private final Pool pool = new Pool(); + + /** + * 关闭时相关配置 + */ + private final Shutdown shutdown = new Shutdown(); + + /** + * 线程池前缀 + */ + private String threadNamePrefix = "magic-task-"; + + public Pool getPool() { + return this.pool; + } + + public Shutdown getShutdown() { + return this.shutdown; + } + + public String getThreadNamePrefix() { + return this.threadNamePrefix; + } + + public void setThreadNamePrefix(String threadNamePrefix) { + this.threadNamePrefix = threadNamePrefix; + } + + public static class Pool { + + /** + * 线程池大小 + */ + private int size = Runtime.getRuntime().availableProcessors(); + + public int getSize() { + return this.size; + } + + public void setSize(int size) { + this.size = size; + } + + } + + public static class Shutdown { + + /** + * 关闭时是否等待任务执行完毕,默认为false + */ + private boolean awaitTermination; + + /** + * 关闭时最多等待任务执行完毕的时间 + */ + private Duration awaitTerminationPeriod; + + public boolean isAwaitTermination() { + return this.awaitTermination; + } + + public void setAwaitTermination(boolean awaitTermination) { + this.awaitTermination = awaitTermination; + } + + public Duration getAwaitTerminationPeriod() { + return this.awaitTerminationPeriod; + } + + public void setAwaitTerminationPeriod(Duration awaitTerminationPeriod) { + this.awaitTerminationPeriod = awaitTerminationPeriod; + } + + } +}