status: completed
定时任务并发重试治理 进入 apply。ALLOW/SKIP_IF_RUNNING、Misfire 策略 FIRE_ONCE_NOW/DO_NOTHING 和日志执行状态常量。V1.0.43__add_job_execution_policies.sql,使用 information_schema 和 WHERE NOT EXISTS 保护字段、存量默认值和字典数据。ALLOW/DO_NOTHING,重试次数限制为 0-5,非幂等任务禁止自动重试。JobExecutionPolicyMigrationContractTest,JobConfigValidatorTest,17/17 通过。RUNNING,终态 SQL 仅允许 status=2 的原记录转成功、失败或跳过;生命周期与 Mapper 契约测试 5/5 通过。SKIP_IF_RUNNING 使用 forge:job:execution:<jobConfigId> 零等待 Redisson 锁;竞争、Redis 缺失和异常均不放行业务执行;锁与重试测试 7/7 通过。FireAndProceed/DoNothing,ONCE 映射 FireNow/NextWithRemainingCount。sys_job_log_status;表单与 Cron 定向测试 13/13 通过。application-job-example.yml 末尾失效注释。JobExecutionLockManager 共享同一测试锁状态,首个管理器持锁时第二个立即返回竞争,释放后可以重新获取;该测试不等同于真实 Redis 多实例 E2E。mvn -Penable-tests -pl forge-framework/forge-plugin-parent/forge-plugin-job -am -Dtest=JobExecutionLifecycleServiceTest,JobExecutionLockManagerTest -Dsurefire.failIfNoSpecifiedTests=false test,5/5 通过,Reactor 14/14 成功。mvn -Penable-tests -pl forge-framework/forge-plugin-parent/forge-plugin-job -am test,84/84 通过,Reactor 14/14 成功。pnpm exec vitest run src/views/system/job-config/__tests__/job-config-form.test.js src/components/job/__tests__/cron-builder.test.js,13/13 通过。pnpm exec eslint,通过且无输出。NODE_OPTIONS=--max-old-space-size=8192 pnpm build,通过;保留仓库既有组件命名、动态/静态导入和 CSS 注释警告。mvn -pl forge-admin-server -am package -DskipTests,Reactor 42/42 成功;保留既有 deprecation 和 unchecked 警告。xmllint --noout;V1.0.43 无 Flyway ${...} 占位符;Job Service 无 LambdaQueryWrapper/lambdaQuery;冲突标记扫描和 git diff --check 通过。PATH 未包含 Maven 而未启动;首次堆栈断言因 Mockito 混用匹配器失败,统一参数匹配器后定向和全量测试均通过。