变更范围:
ai_lowcode_model、ai_crud_config、ai_crud_config_version。P0 必跑:
git diff --check 覆盖本轮文档、Java、Mapper XML、Flyway 脚本。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests 覆盖 generator 及依赖模块编译。P1 后续补充:
pnpm build 和关键页面联调验证。变更范围:
forge-business 租户默认业务数据源解析器、上下文、JDBC 模板提供器和主库回退。纠偏说明:
forge-business 验证只能证明 JDBC 模板方案编译通过,不能证明业务侧 MyBatis-Plus Mapper/XML 能切换租户业务数据源。forge-business dynamic-datasource 纠偏验证”为准。P0 必跑:
git diff --check 覆盖本轮文档、Java、Mapper XML、Flyway 和前端文件。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests。mvn -pl forge-business/forge-business-core -am compile -DskipTests。pnpm --dir forge-admin-ui build 覆盖前端打包链路。P1 后续补充:
forge-business dynamic-datasource 纠偏变更范围:
forge.business.datasource.enabled 和 business.datasource.tenant-routing-enabled。default_business_datasource_code 保存已配置 dynamic-datasource dsKey,Resolver 校验 dsKey 存在后切换。@TenantBusinessDataSource 注解和 AOP:方法执行前按当前租户 push dsKey,finally 清理。TenantBusinessDataSourceExecutor:支持显式 tenantId,用于无登录态任务。TenantBusinessDataSourceTaskDecorator:在 forge.business.datasource.enabled=true 时覆盖 @Async/线程池任务上下文传播。BusinessJdbcTemplateProvider 作为主路径。business/datasource-demo 后端用例:使用 @TenantBusinessDataSource 和显式 TenantBusinessDataSourceExecutor 验证同一 Mapper/XML 在不同租户下命中不同业务库。P0 必跑:
git diff --check 覆盖 code-copilot/changes/lowcode-runtime-datasource-isolation、forge-server/forge-framework/forge-starter-parent/forge-starter-tenant、forge-server/forge-business/forge-business-core、dynamic-datasource 路由相关 Java 文件和配置文件。mvn -pl forge-admin-server -am compile -DskipTests,确保 admin 入口能带起 forge-starter-tenant 通用能力和 forge-business-core demo。mvn -pl forge-business/forge-business-core -am compile -DskipTests。mvn -pl forge-business/forge-business-core -am test -Dtest='*TenantBusinessDataSource*,*BusinessDataSource*';当前父 POM 固定跳过 testCompile/surefire,执行时必须同时记录是否实际运行测试源。master。当前已补:
TenantBusinessDataSourceTaskDecoratorTest 覆盖异步装饰器传播租户和 dynamic-datasource key、隔离线程池旧上下文、执行后恢复 worker 原上下文。BusinessDatasourceDemoController / BusinessDatasourceDemoMapper.xml 提供手工验证接口:POST /business/datasource-demo/prepare?tenantId=<id>&title=...、GET /business/datasource-demo/list?tenantId=<id>。P1 集成验证:
master + 两个已配置到 dynamic-datasource 的租户业务测试库,两个库创建同名业务表并写入不同数据。forge-business 测试 Mapper/XML,Service 标注 @TenantBusinessDataSource,分别模拟租户 A/B 查询,确认返回各自业务库数据。@Transactional 场景:切面先于事务生效;已开启主库事务后再切换业务库的场景必须失败或被代码审查阻断。@Async 或线程池任务:提交时带 tenantId,异步线程内 Mapper 命中对应业务库,任务结束后上下文清理。变更范围:
id 或转换为 Long。id。DATASOURCE_* 检查项和风险标签。P0 必跑:
git diff --check 覆盖本轮 Java、Vue 和当前变更文档。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests。BusinessPublishChecklist.vue。pnpm --dir forge-admin-ui build 覆盖发布检查前端打包链路。P1 后续补充:
Long recordId,后续需要单独设计 ai_business_flow_instance_link.record_id 字段和接口协议迁移。变更范围:
userNick 生成 user_nick。数据库列名格式不正确: userNick。P0 必跑:
git diff --check 覆盖 LowcodeSchemaValidator.java、LowcodeDdlService.java、ForgePropertyPanel.vue 和当前变更文档。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests 覆盖后端 Schema/DDL 校验编译。ForgePropertyPanel.vue。pnpm --dir forge-admin-ui build 覆盖前端打包链路。P1 后续补充:
field=userNick 时默认保存 columnName=user_nick。userNick 时,Schema 校验允许通过。变更范围:
LOWCODE_RUNTIME 用途过滤;数据库导入模式复用该运行数据源加载数据表,不再使用租户业务模块数据源口径。runtimeDatasourceId 和对象 options.runtimeDatasource;设计器默认模型从对象 options 解析运行数据源,保存草稿时同步写入 ai_lowcode_model 和 ai_crud_config 的运行数据源冗余字段。P0 必跑:
git diff --check 覆盖 BusinessObjectWizardDrawer.vue、BusinessObjectDTO.java、BusinessObjectDesignerService.java 和当前变更文档。BusinessObjectWizardDrawer.vue。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests。pnpm --dir forge-admin-ui build 覆盖创建向导前端打包链路。P1 后续补充:
LOWCODE_RUNTIME/BOTH 数据源。LOWCODE_RUNTIME 数据源后,只加载该数据源表,并在保存草稿后模型/运行配置保留同一个运行数据源快照。变更范围:
SystemLogServiceImpl 补全日志用户信息时忽略租户条件查询 SysUser,并对用户不存在做 null 保护。TenantBusinessDataSourceTaskDecorator 传播并恢复 TenantContextHolder.isIgnore() 状态,避免异步线程清掉系统级忽略租户标记。TenantBusinessDataSourceTaskDecoratorTest 增加忽略租户标记传播和恢复断言。P0 必跑:
git diff --check 覆盖本轮 Java、测试和文档文件。mvn -pl forge-admin-server -am compile -DskipTests,确认 admin 入口带起 forge-plugin-system、forge-starter-tenant 和 forge-business-core 编译通过。P1 后续补充:
log-async-* 不再出现 SysUser.getUsername() 空指针。@Async 日志线程不会因为用户补全查询打印“当前上下文中没有租户ID”的告警。变更范围:
business/datasource-debug.vue,支持选择租户、检测当前路由、写入测试记录、读取演示表记录。V1.0.77__add_business_datasource_debug_menu.sql,注册“业务数据源调试”菜单和 demo 接口 API 资源,并给 admin / 已有数据源管理角色授权。P0 必跑:
git diff --check 覆盖新 Vue、Flyway 脚本和当前变更文档。forge-admin-ui/src/views/business/datasource-debug.vue。pnpm --dir forge-admin-ui build 覆盖动态路由页面打包。mvn -pl forge-admin-server -am compile -DskipTests 覆盖新增 Flyway 脚本随 admin 服务资源打包。P1 后续补充:
default_business_datasource_code 后,分别写入记录,确认页面展示的 当前数据库、线程 dsKey 和 routeKey 与预期一致。变更范围:
DataScopeServiceImpl 改为启动/刷新时强制在 metadataDatasource=master 且忽略租户条件下加载数据权限配置、角色数据范围、自定义组织、组织层级和行政区划父子关系。sys_data_scope_config、sys_role、sys_org、sys_region_code 等平台表。IN (SELECT code FROM sys_region_code ...) 子查询,而是提前解析为业务库可执行的字面量 IN (...) 条件。forge.datascope.metadata-datasource 和 forge.datascope.default-config-tenant-id 配置项,默认分别为 master 和 1。P0 必跑:
git diff --check 覆盖 forge-starter-datascope Java/POM 和当前变更文档。mvn -pl forge-framework/forge-starter-parent/forge-starter-datascope -am compile -DskipTests。mvn -pl forge-admin-server -am compile -DskipTests,确认 admin 入口聚合 forge-starter-datascope、forge-starter-tenant、dynamic-datasource 后编译通过。P1 后续补充:
Table '<业务库>.sys_data_scope_config' doesn't exist。sys_region_code 子查询,业务库无需复制平台行政区划表。变更范围:
com.oracle.database.jdbc:ojdbc8:21.9.0.0,覆盖低代码 generator、forge-business-core 和 forge-app-server。LowcodeDdlService 的建表、加列、字段变更、索引和注释语句改为按方言生成,避免 Oracle 执行 MySQL 专属 ENGINE=InnoDB / COMMENT 内联语法。oracle.jdbc.OracleDriver 和 SELECT 1 FROM DUAL。P0 必跑:
git diff --check 覆盖 Oracle 适配 Java/POM/Vue 和当前变更文档。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests。mvn -pl forge-business/forge-business-core -am compile -DskipTests。mvn -pl forge-app-server -am compile -DskipTests。mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator,forge-business/forge-business-core,forge-app-server dependency:tree -Dincludes=com.oracle.database.jdbc:ojdbc8 -DskipTests,确认实际解析版本为 21.9.0.0。forge-admin-ui/src/views/generator/datasource.vue。pnpm --dir forge-admin-ui build 覆盖前端打包链路。P1 后续补充:
SELECT 1 FROM DUAL。CREATE TABLE、COMMENT ON TABLE/COLUMN、CREATE INDEX、ALTER TABLE ADD/MODIFY 能执行。forge-business 租户业务数据源 dsKey 指向 Oracle 时,MyBatis-Plus Mapper/XML 能通过 dynamic-datasource 正常路由。