7.3 KiB
Standard DB Render Apply Implementation Plan
For Claude: REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.
Goal: 将标准版初始化中的数据库步骤从黑盒 DB_INIT 拆分为 DB_RENDER 和 DB_APPLY,生成可审计的 SQL 输出物,并保留数据库凭据在预制层处理。
Architecture: 标准版步骤编排改为先在 task staging 目录生成渲染后的 SQL 包,再由单独的 DB_APPLY 步骤将 SQL 包落位到标准收发器数据库加载目录,并按预置命令执行导库。渲染逻辑直接基于 sql_script_tmp 模板和 CMEP-DML.sql/CMEP.sql,不依赖 vendor 脚本副作用,也不修改 vendor 原始介质。
Tech Stack: Java 17, Spring Boot 3.5, Jackson, JUnit 5, Maven
Task 1: 固化步骤编排与计划文档
Files:
- Create:
/Users/waner/Work/CISD/文档/tms-framework/docs/plans/2026-03-09-standard-db-render-apply-plan.md - Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/service/InitService.java - Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/initplan/step-command-profiles.json - Test:
/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/service/InitServiceTest.java
Step 1: Write the failing test
在 InitServiceTest 增加标准版断言:
ENTERPRISE + RABBITMQ不再包含DB_INIT- 改为包含
DB_RENDER和DB_APPLY ENTERPRISE + TLQ、INDIRECT + RABBITMQ、INDIRECT + RABBITMQ_TLQ同样断言
Step 2: Run test to verify it fails
Run: mvn -q -Dtest=InitServiceTest test
Expected: FAIL,提示仍存在 DB_INIT 或缺少 DB_RENDER/DB_APPLY
Step 3: Write minimal implementation
修改 InitService.defaultSteps() 与 step-command-profiles.json:
- 标准版统一把
DB_INIT替换成DB_RENDER、DB_APPLY - 直参版保持
DB_INIT - 标准版
DB_RENDER使用internal::db_render - 标准版
DB_APPLY使用internal::db_apply
Step 4: Run test to verify it passes
Run: mvn -q -Dtest=InitServiceTest test
Expected: PASS
Task 2: 先写标准版 SQL 渲染失败用例
Files:
- Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java - Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/config/InitExecutorProperties.java - Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/application.yml - Modify:
/Users/waner/Work/CISD/文档/tms-framework/config/application.yml.example
Step 1: Write the failing test
新增两个执行器测试:
shouldRenderStandardDatabaseSqlPackageForEnterpriseRabbitmq- 在临时目录准备
cpconfig.cfg、sql_script/CMEP-DML.sql、sql_script/CMEP.sql、sql_script/SCHEMA-DDL.sql、sql_script/UP-ORG-INFO.sql、sql_script/sql_script_tmp/CMTP-01-raq.sql - 执行
internal::db_render - 断言 staging 下存在
db/sql/CMTP-01.sql、CMEP-DML.sql、CMEP.sql等文件 - 断言
AAAABBBBXXX、01tlq.ip、02tlq.ip、sptp.01app.ip被替换
- 在临时目录准备
shouldApplyStandardDatabaseSqlPackageToLoadDir- 基于上一步产物执行
internal::db_apply - 断言 SQL 被复制到 configured load dir
- 基于上一步产物执行
Step 2: Run test to verify it fails
Run: mvn -q -Dtest=ConfigurableInitStepExecutorTest test
Expected: FAIL,提示不支持 db_render/db_apply 或目标文件不存在
Step 3: Define minimal config surface
为标准版数据库处理增加配置项:
standard-db-script-base-dirstandard-db-load-dirstandard-db-apply-commandstandard-db-entry-sql-file-name
并在两个 application.yml 中补注释和默认值。
Step 4: Re-run focused test
Run: mvn -q -Dtest=ConfigurableInitStepExecutorTest test
Expected: 仍失败,但失败点只剩未实现逻辑
Task 3: 实现标准版 DB_RENDER
Files:
- Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java - Test:
/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java
Step 1: Add internal step dispatch
在 executeInternal() 新增:
case "db_render" -> executeStandardDbRender(task, step)
Step 2: Implement render behavior
新增最小实现:
- 仅对标准版生效;直参版返回 skipped
- 从
standard-db-script-base-dir读取:sql_script/CMEP-DML.sqlsql_script/CMEP.sqlsql_script/SCHEMA-DDL.sqlsql_script/UP-ORG-INFO.sqlsql_script/sql_script_tmp/CMTP-01-raq.sql或CMTP-01-tlq.sql
- 渲染输出到
staging/<taskId>/db/sql/ - 输出文件名固定为:
CMEP-DML.sqlCMEP.sqlSCHEMA-DDL.sqlUP-ORG-INFO.sqlCMTP-01.sql
- 渲染规则复用
buildStandardReplacements(),并补充 SQL 占位映射:AAAABBBBXXX -> orgCode01tlq.ip -> mq_01_ip02tlq.ip -> mq_02_ipsptp.01app.ip -> sptp_01app_ipsptp.02app.ip -> sptp_02app_ipmybiccode/mycipsid/myleicode -> 对应机构号映射
CMEP.sql里的source /home/cmep4i/mysql/loadfilepath/...保持不变,不在渲染阶段改路径
Step 3: Run render test
Run: mvn -q -Dtest=ConfigurableInitStepExecutorTest#shouldRenderStandardDatabaseSqlPackageForEnterpriseRabbitmq test
Expected: PASS
Task 4: 实现标准版 DB_APPLY
Files:
- Modify:
/Users/waner/Work/CISD/文档/tms-framework/src/main/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutor.java - Test:
/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java
Step 1: Add internal step dispatch
在 executeInternal() 新增:
case "db_apply" -> executeStandardDbApply(task, step)
Step 2: Implement apply behavior
最小实现:
- 仅对标准版生效;直参版返回 skipped
- 从
staging/<taskId>/db/sql/读取渲染后 SQL 包 - 复制到
standard-db-load-dir SIMULATE模式只校验 staging 产物存在并返回 successLOCAL模式:- 若
standard-db-apply-command为空,只做落位并返回 success - 若不为空,则以该命令执行导库,工作目录指向
standard-db-load-dir
- 若
- 成功日志中明确输出 staging 路径、load dir、是否执行导库命令
Step 3: Run apply test
Run: mvn -q -Dtest=ConfigurableInitStepExecutorTest#shouldApplyStandardDatabaseSqlPackageToLoadDir test
Expected: PASS
Task 5: 全量回归与最小文档同步
Files:
- Modify:
/Users/waner/Work/CISD/文档/tms-framework/docs/plans/2026-03-09-auto-deploy-refactor.md - Test:
/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/service/InitServiceTest.java - Test:
/Users/waner/Work/CISD/文档/tms-framework/src/test/java/com/cisd/tms/modules/init/executor/ConfigurableInitStepExecutorTest.java
Step 1: Sync plan wording
在重构计划中把 Task 3 结果更新为已实现方向:标准版数据库改为 DB_RENDER / DB_APPLY。
Step 2: Run targeted tests
Run: mvn -q -Dtest=InitServiceTest,ConfigurableInitStepExecutorTest test
Expected: PASS
Step 3: Run compile verification
Run: mvn -q -DskipTests compile
Expected: PASS