egg定时任务
需求
近期接到一个任务,使用egg每日定时刷新数据库的内容,那么如何去编写一个定时任务呢?
调研
访问egg官网的教程,我们可以看到其存在定时任务这一项(https://eggjs.org/zh-cn/basics/schedule.html
)。
使用
在官网的教程中,我们可以很简单的了解到egg对于定时任务封装后的使用简便。可以说是相当easy了。
主要有以下2种方式的定时方式:
- interval:通过 schedule.interval 参数来配置定时任务的执行时机,定时任务将会每间隔指定的时间执行一次;
- cron: 通过 schedule.cron 参数来配置定时任务的执行时机,定时任务将会按照 cron 表达式在特定的时间点执行。
两种方式都是相当简单的,这里我们先来看下代码逻辑:
module.exports = {
schedule: {
cron: '0 0 2 * * ?', // 每日2点执行
// interval: '1m', // 1 分钟间隔
type: 'all', // 指定所有的 worker 都需要执行
},
async task(ctx) {
const { exportRemoteService } = ctx.service;
console.log("执行exportRemoteService.export(), 时间点: " + new Date().getTime());
exportRemoteService.export();
},
};
注意:
框架提供的定时任务默认支持两种类型,worker 和 all。worker 和 all 都支持上面的两种定时方式,只是当到执行时机时,会执行定时任务的 worker 不同:
-
worker
类型:每台机器上只有一个 worker 会执行这个定时任务,每次执行定时任务的 worker 的选择是随机的。 -
all
类型:每台机器上的每个 worker 都会执行这个定时任务。