mirror of
https://gitee.com/ssssssss-team/magic-api.git
synced 2026-05-08 03:16:39 +08:00
定时任务插件优化
This commit is contained in:
@@ -46,24 +46,24 @@ public class TaskMagicDynamicRegistry extends AbstractMagicDynamicRegistry<TaskI
|
||||
@Override
|
||||
protected boolean register(MappingNode<TaskInfo> 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());
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user