定时任务 API
本页提供公开签名、字段约束和错误边界。创建、配置、部署和排错的完整操作见定时任务指南,执行保证见定时任务契约。
defineJob
从框架公开入口导入所需函数和类型:
以下是签名参考,不是需要复制到任务文件的类型声明:
defineJob() 同步验证并返回带框架识别标记的任务定义,冻结顶层对象;不是对 docs/tags 的深冻结。未知顶层字段或显式无效值不会被默认值掩盖。isVextJobDefinition() 只作定义类型识别,不证明模块加载、静态声明合法、应用就绪或任务已执行。
handler 上下文
定义规则
默认递归发现 src/jobs 下 .ts/.js/.mjs/.cjs/.mts/.cts 模块。每个选中文件恰有一个有限的默认 SDK Job,CommonJS 等价为 module.exports。普通 helper、类型与常量导出允许,不能把命名 Job 当作新增任务注册入口。
允许可识别的默认别名、动态字段,以及项目源码范围内有限的相对默认转导出;入口和被引用定义都要满足规则。工厂/条件默认形式、数组、仅命名 Job、额外 SDK 声明(包括未调用的位置)、Job 命名别名、用户 getter/Proxy 或后续改变导出均不受支持。这里是有限声明规则,不是任意 JavaScript 副作用沙箱;禁止在任务模块顶层主动执行业务或另建 Timer。
显式 name 优先,否则由任务相对路径去扩展名、去末尾 /index 并转点分名,不改变 camelCase。禁用定义也参与重名检查。全局关闭跳过发现;单任务关闭仍检查字段、声明数量、TTL 与名称,只免除执行和未来点要求。
构建在优化前检查声明;生产可以只部署正确的构建产物,无需为了 Jobs 额外部署 src。精确扫描与目录示例见发现规则。
VextJobsConfig
写入已有 src/config/default.ts 或所选 profile 的 jobs 字段,遵循正常配置合并顺序。以下全部可选:
未知配置字段拒绝。目录和数组等结构在全局关闭时仍须合法;全局关闭和单任务关闭的导入差异见上文。
Redis 配置
单进程或单个内置 Cluster 无需 Redis。独立应用需要共享协调时配置 jobs.redis;只有环境变量而没有这个对象,不启用 Redis。
连接优先级为 client > url > uri > VEXT_REDIS_URL > REDIS_URL。无效 client(包括 null)不会回退 URL;地址按省略值回退,显式空 url 不回退。有启用任务时,连接或必要脚本能力初始化失败会拒绝启动;无启用任务不建立或检查多余连接,但配置结构和 TTL 仍校验。
默认 namespace 由项目包名、VEXT_CONFIG(缺省 default)和 NODE_ENV(缺省 production)生成;包名不可读回退 vextjs-app。默认逻辑前缀为 vext:<namespace>:job:。namespace 去开头 @、将路径分隔符转点、将不支持字符转连字符、合并连续分隔符并去首尾分隔符;例如 @team/my-app:production:production 变为 team.my-app:production:production。规范化后为空则使用 vextjs-app。空白 keyPrefix 不会覆盖显式或自动 namespace。
共享域需保持 Redis 目标、有效前缀、任务名和定义一致;改变名称/前缀会改变身份,TTL 不参与身份。Jobs 不借用 cache、Session 或限流的 Redis 配置。运行期间按每个 Job 的有效 TTL 续租;同名任务各副本保持一致 TTL。shutdown.timeout 以秒计,是整个应用共享的关闭预算。
任务文档配置
项目文档来源
以下配置只影响静态文档,不影响任务发现、执行资格或实际调度:
dir/include/exclude 分别继承、分别覆盖;openapi.docs.code.enabled: false 关闭整体代码文档,但不停止任务。disabled 定义可以展示;无法静态证明的值保留 unknown/partial,runtimeVerified: false 不代表任务已启动或执行。默认查看步骤和可选覆盖见指南。
错误与执行边界
执行资格去重不是业务副作用 Exactly Once。网络分区、状态丢失和忽略取消仍需业务幂等;详见行为契约。
测试入口
createTestJobScheduler、CreateTestJobSchedulerOptions、TestJobScheduler 从 vextjs/testing 导入。helper 显式接收定义和受控时钟,不扫描文件或创建真实 Timer;普通 createTestApp 不自动加载 Jobs。见测试 API及指南。