status: complete created: 2026-07-21 complexity: 🔴复杂 parent: code-copilot/changes/定时任务优化/spec.md version: V10 dependency: 定时任务可靠性加固、定时任务开放API、定时任务出站安全、定时任务Flowable编排
V1-V9 功能实现完成后的整体静态审查发现,内部 RPC 执行器仍可绕过管理权限,远程执行只判断 HTTP 状态且未进入受控出站链路;日志清理、进程崩溃、配置并发同步、一次性 Misfire 和并行失败统计也存在状态悬挂或乱序覆盖风险。V10 只修复这些已确认问题,不新增任务类型或第二套调度协议。
SecureOutboundClient/JOB_RPC,同时校验 HTTP 状态和 RespInfo.code,失败必须进入重试、失败日志和告警链路。JOB_RPC 使用独立白名单场景,只有显式白名单才能访问,私网访问必须由该场景单独授权。RUNNING、ACCEPTED 或仍在幂等有效期内引用的执行记录,留存天数必须限制在 0 到 3650 天。RUNNING/ACCEPTED 记录终结为失败,避免永久悬挂。POST /job/executor/execute,但 forge.job.executor-enabled 缺省为关闭。Authorization: Bearer <forge.job.executor-token> 调用;Token 必须由环境变量注入且不少于 32 个字符。handlerName 和 param;服务端日志只记录 handlerName,响应失败不返回内部异常详情。executorService 继续兼容 host[:port],最终 URL 固定拼接 /job/executor/execute,由 JOB_RPC 白名单执行 DNS、IP、端口、重定向和响应大小检查。NOT EXISTS 排除 expires_at > NOW() 的有效幂等引用。forge.job.execution-recovery-timeout 配置,合法范围 1 分钟到 24 小时。RUNNING/ACCEPTED 统一转为 FAILED,写入脱敏的系统恢复原因和结束时间;恢复动作必须幂等。WHERE id = ? AND version = ? 更新状态。若版本已变化,不覆盖新状态并重新读取最新版本同步。V1.0.49__fix_job_scheduler_scan_findings.sql。JOB_RPC,更新私网约束为仅 FLOW_API/JOB_RPC 可授权。sys_job_config 增加失败统计顺序字段,默认不影响既有记录。information_schema 防重复保护,业务内置数据 tenant_id=1。executorService 仍由现有配置提供。RespInfo.code != 200、非法 JSON 都判为失败;成功只返回 RespInfo.data。178/178、Outbound 48/48、Remote Flow Client 9/9、定时任务前端 29/29 通过。43/43、Flow Reactor 32/32 和前端生产构建通过。tenant_id=0、Mapper XML、Job 直连 HTTP、迁移版本唯一性、ESLint 和 git diff --check 门禁通过。