Skip to content

定时任务

VonaJS 基于BullMQ提供了直观、易用的定时任务。因为定时任务是队列的特例

创建定时任务

比如,在模块 demo-student 中创建一个定时任务: log,按指定的时间间隔在控制台输出当前时间

1. Cli命令

bash
$ vona :create:bean schedule log --module=demo-student

2. 菜单命令

TIP

右键菜单 - [模块路径]: Vona Bean/Schedule

定时任务定义

typescript
@Schedule({ repeat: { every: 3000 } })
export class ScheduleLog extends BeanBase implements IScheduleExecute {
  async execute() {
    console.log(Date.now());
  }
}
  • execute: 输出当前时间

定时任务参数

可以为定时任务配置参数

typescript
@Schedule({
  queue: undefined,
  repeat: {
    every: 3000,
    pattern: '0 15 3 * * *',
  },
  templateOptions: {},
  dbInfo: undefined,
  transaction: false,
})
class ScheduleLog {}
名称类型说明
queuestring定时任务所使用的队列名称。默认值为空,从而使用系统内置的队列
repeat.everynumber间隔时间
repeat.patternstringcron expression。参见: cron-parser
templateOptionsBull.JobSchedulerTemplateOptionsBull JobScheduler选项
dbInfo.levelnumber默认使用数据源分级1,参见: 数据源分级
dbInfo.clientNamestring默认使用系统默认的数据源名称
transactionboolean是否启用数据库事务,默认为false

App Config

可以在 App Config 中配置定时任务参数

src/backend/config/config/config.ts

typescript
// onions
config.onions = {
  schedule: {
    'demo-student:log': {
      repeat: {
        every: 5000,
      },
      transaction: true,
    },
  },
};

定时任务启用/禁用

可以控制定时任务的启用/禁用

1. Enable

src/backend/config/config/config.ts

diff
// onions
config.onions = {
  schedule: {
    'demo-student:log': {
+     enable: false,
    },
  },
};

2. Meta

可以让定时任务在指定的运行环境生效

名称类型说明
flavorstring|string[]参见: 运行环境与Flavor
modestring|string[]参见: 运行环境与Flavor
  • 举例
diff
@Schedule({
  repeat: {},
+ meta: {
+   flavor: 'normal',
+   mode: 'dev',
+ },
})
class ScheduleLog {}

查看当前生效的定时任务清单

可以直接输出当前生效的定时任务清单

diff
class ControllerStudent {
  @Web.get('test')
  test() {
+   this.bean.onion.schedule.inspect();
  }
}
  • this.bean.onion: 取得全局 Service 实例 onion
  • .schedule: 取得与定时任务相关的 Service 实例
  • .inspect: 输出当前生效的定时任务清单

当访问test API 时,会自动在控制台输出当前生效的定时任务清单,效果如下:

基于 MIT 许可发布