UNPKG

@thatcompany/ts-tool

Version:

基于TypeScript编写的工具库

68 lines 2.82 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.ICronTaskRegister = void 0; const annotation_1 = require("../../../annotation"); const ITaskRegister_1 = require("./ITaskRegister"); const logger_1 = require("../../../../logger"); const node_cron_1 = __importDefault(require("node-cron")); /** * 调度任务注册器基类 * * 实例化时需要实现fetchConfigs方法,用于获取调度任务配置,返回值类型为基于`ECronTaskService`的数组 * * 注意莫要遗忘 `@Task.Register` 装饰器,否则不会被扫描到 * * @example * ```typescript * @Task.Register * class CronTaskRegister extends ICronTaskRegister { * override async fetchConfigs(): Promise<ECronTaskService[]> { * const taskConfig = new ECronTaskService(); * taskConfig.Id = 1; * // 基于class属性动态加载对应的调度任务服务类 * taskConfig.class = 'TaskService'; * taskConfig.title = '测试任务'; * taskConfig.description = '测试任务描述'; * taskConfig.cron = '*\/5 * * * * *'; * return [taskConfig]; * } * } * ``` */ const logger = logger_1.LoggerContext.getSubLogger('CronTaskRegister', true); class ICronTaskRegister extends ITaskRegister_1.ITaskRegister { DESCRIPTION = '调度任务注册器'; IDENTIFIER = annotation_1.METADATA.TASK.REGISTER; IDENTIFIER_CHILD = annotation_1.METADATA.TASK.CRON; async registerTask(item) { const taskConstructor = this.serviceMap.get(item.class)?.prototype?.constructor; if (taskConstructor) { const taskInstance = new taskConstructor(); // @ts-ignore if (!(Object.keys(item).includes('__singleton__') && item.__singleton__)) { taskInstance.init(item.title, item.description, item.cron); } this.services.set(item.Id + '', taskInstance); const scheduledTask = this.build(taskInstance); this.taskList.set(item.Id + '', scheduledTask); logger.silly(`实例化调度任务:${item?.title || taskInstance.NAME} - ${item?.description || taskInstance.DESCRIPTION}`); } else { logger.error(`未找到对应服务:${item.class}`); } } build(task) { const schedule = node_cron_1.default.schedule(task.CRON_EXP, async () => { logger.silly(`调度任务 ${task.NAME} - (${task.DESCRIPTION}) 开始执行...`); await task.run(); }); // @ts-ignore schedule['__title'] = task.NAME; return schedule; } } exports.ICronTaskRegister = ICronTaskRegister; //# sourceMappingURL=ICronTaskRegister.js.map