一、背景概述:为何低代码平台需要定时任务?
在多数企业系统中,除了用户主动触发的“界面操作”与“接口调用”外,还有大量周期性执行的任务场景:
-
每日汇总报表定时推送(如:门店销售汇总、学员报到统计)
-
定期清理无效数据(如:7 天未登录账户清理)
-
定时触发流程(如:每周五下午自动发起请假申请提醒)
-
同步外部数据源(如:从 ERP/CRM 系统定时拉取最新库存)
在传统平台中,这类需求往往需要专门开发后台调度器,接入 Quartz、Spring Schedule、XXL-Job 等框架;但对于非开发人员来说,配置、部署、维护都较为困难,存在如下痛点:
-
代码耦合高:定时逻辑常常绑定在代码中,难以热更新
-
变更成本大:修改调度时间需重新部署
-
缺乏可视化监控:运行状态难追踪,异常难排查
因此,橙武低代码平台将“定时任务”作为平台级服务,完全可视化、支持运行时配置,通过 Cron 表达式调度 + 可参数化流程触发 的组合方式,让每一位业务人员也能驾驭系统自动化的能力。
二、平台定时任务设计目标
为了确保功能易用、灵活且可扩展,橙武定时任务模块在设计上遵循以下核心目标:
目标 | 说明 |
---|---|
无代码配置 | 所有任务可通过平台界面配置,无需写一行代码 |
运行时修改 | 调度时间、流程、参数均可动态变更,无需重启服务 |
支持动态参数注入 | 支持任务参数传递给流程,如当前时间、租户信息等 |
完整日志与状态监控 | 每次执行都会记录日志,包括执行状态、返回结果、错误信息 |
安全与权限可控 | 仅可触发类型为“开放”的流程,防止执行权限泄露 |
三、技术选型:Quartz 与 Cron 表达式机制
橙武平台底层调度框架采用 Quartz Scheduler,作为 Java 生态中最成熟的任务调度工具,其核心优势包括:
-
支持 Cron 表达式灵活调度
-
支持持久化任务记录、状态恢复
-
可实现任务失败重试、并发策略控制
-
与 Spring 深度整合,运行稳定
调度时间的表达基于标准 Cron 表达式,支持如下一些典型用法:
表达式 | 含义 |
---|---|
0 0 9 * * ? | 每天上午 9 点执行一次 |
0 0/30 * * * ? | 每 30 分钟执行一次 |
0 0 12 ? * MON | 每周一中午 12 点执行 |
0 0 0 1 * ? | 每月 1 日凌晨 0 点执行 |
用户可通过平台提供的 Cron 编辑器,快速生成目标时间规则,无需记忆复杂语法。
四、定时任务执行架构设计
橙武定时任务不是执行代码,而是通过调度流程引擎来完成所有任务逻辑的承载,这一模式的最大好处是:
“任务只负责调度,不负责执行;真正的执行由可视化流程来定义。”
4.1 架构图
用户配置任务(定时频率 + 流程ID + 参数)
↓
Quartz调度器触发
↓
校验任务状态 / 类型
↓
POST 调用开放流程引擎 → /api/open/process/start
↓
流程执行成功 → 记录日志(执行时间、状态、参数、异常等)
4.2 流程触发条件
平台要求任务所触发的流程必须满足:
-
流程类型为“开放流程”(Open Type)
-
流程入口为 HTTP 可访问接口,无需登录凭证
-
流程支持参数传入(JSON格式)
这样设计的目的在于防止定时任务在调用受保护流程时失败或权限泄露。
五、平台实现细节
5.1 数据表结构设计
橙武平台使用以下两张主表来存储定时任务与执行日志:
scheduled_jobs
字段名 | 类型 | 说明 |
---|---|---|
job_id | INT | 任务ID |
job_name | VARCHAR | 任务名称 |
cron_expression | VARCHAR | Cron表达式 |
flow_code | VARCHAR | 流程编码 |
parameters | VARCHAR | JSON格式参数 |
status | VARCHAR | 启用/禁用 |
scheduled_job_logs
字段名 | 类型 | 说明 |
---|---|---|
log_id | INT | 日志ID |
job_id | INT | 对应任务ID |
execute_time | DATETIME | 实际执行时间 |
status | VARCHAR | 成功/失败 |
response | TEXT | 执行返回(包含流程实例ID等) |
error_message | TEXT | 错误信息(如有) |
5.2 任务创建与操作流程
-
进入“定时任务管理”模块
-
点击“新增任务”
-
填写如下信息:
-
任务名称
-
Cron 表达式(支持图形化设置)
-
触发流程(选择流程列表中类型为“开放”的流程)
-
参数(JSON 格式)
-
状态(启用/禁用)
-
-
提交后,Quartz 自动注册任务调度
-
平台在每次执行后生成执行日志,可查看结果
5.3 可视化配置入口
所有任务配置均在橙武后台“定时任务管理”模块中完成:
-
任务列表页:查看任务名称、Cron表达式、状态、上次执行时间等
-
编辑页:修改任务信息、暂停/启用、参数变更
-
日志页:查看每次执行记录,支持筛选失败任务、导出日志等
六、安全机制与“开放流程”约束说明
由于定时任务是平台后台自动触发,必须具备如下安全保障:
-
不依赖登录态:定时任务运行时不会有用户上下文
-
不能访问有权限保护的流程:否则会出现403/401错误
-
参数需封闭、受控:避免注入类攻击
因此,橙武平台要求:所有被定时任务调用的流程,必须为“开放流程”类型。
管理员在配置流程时,只需将该流程设置为“开放”,平台将自动开放 HTTP 接口:
POST /api/open/process/start?flowCode=xxx
Content-Type: application/json
Body: { "paramA": "value" }
该接口无需登录验证,平台后台会自动注入系统级 token 与租户上下文(如果开启多租户模式)。
七、实战示例:每日订单汇总任务
需求描述
每日凌晨 1 点,平台自动汇总昨日订单总量、销售金额,并将结果写入数据统计表,用于管理后台展示。
实现流程
-
设计流程:
order_summary_daily
-
读取订单表,按日期统计
-
将结果写入报表表
-
-
设置流程为“开放类型”
-
新建任务:
字段 | 值 |
---|---|
任务名称 | 每日订单汇总 |
Cron表达式 | 0 0 1 * * ? |
流程编码 | order_summary_daily |
参数 | { "dayOffset": -1 } |
状态 | 启用 |
-
启动任务,平台每日凌晨调度流程并写入结果。
-
在日志页可查看每次执行记录。
八、扩展方向与未来规划
方向 | 描述 |
---|---|
参数动态绑定 | 支持运行时注入更多系统变量,如日期、租户ID、用户列表等 |
邮件通知 | 支持任务失败后自动发送邮件/微信/短信通知 |
多任务串联 | 支持多个流程串联触发(如先导出 → 再发送 → 再归档) |
子任务支持 | 一个流程中可触发多个任务并发执行,适用于分片统计或多地域调度 |
执行权限模型 | 支持流程黑白名单,限定哪些流程可被调度执行 |
九、总结
橙武低代码平台通过集成 Quartz 调度框架,结合可视化流程引擎与“开放流程”架构,构建了一套安全、灵活、动态的定时任务解决方案。无论是日常报表统计、接口同步还是周期性自动流程执行,平台都提供了标准化、可追踪的实现方式。
这不仅提升了系统的自动化水平,也赋予了业务人员更多自由配置的能力,真正实现“流程即业务,时间即触发器”。
📌 当前版本支持所有标准类型流程调用,未来将进一步扩展流程多态、异常回滚机制与链式调度能力,敬请期待。
加群群聊,一起学习和进步!