@thatcompany/ts-tool
Version:
基于TypeScript编写的工具库
68 lines • 2.82 kB
JavaScript
;
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