变更范围:
tasks.md。usageScope 过滤,保存/更新默认运行控制字段,更新/删除后清理动态连接池。验证命令与结果:
git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/java forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/resources/mapper forge-server/db/migration/V1.0.75__add_lowcode_runtime_datasource_fields.sql
mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
无效的目标发行版: 17。JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-system、forge-plugin-generator 及依赖模块编译成功。警告:
跳过项:
服务清理:
执行时间:2026-06-22 17:54:32 CST
变更范围:
forge-server 根 POM 和 forge-dependencies 统一新增 oracle.jdbc.version=21.9.0.0,并在 dependencyManagement 中锁定 com.oracle.database.jdbc:ojdbc8。forge-plugin-generator、forge-business-core 和 forge-app-server 直接引入 ojdbc8,分别覆盖低代码运行数据源、业务侧动态数据源和应用服务 Oracle 连接能力。RuntimeDatabaseDialect 扩展默认测试 SQL、导入元数据 SQL 和受控 DDL 语义;OracleRuntimeDatabaseDialect 补齐 Oracle 表/列/主键/索引元数据、分页、导入、建表、加列、字段修改、注释和索引语句。LowcodeDdlService 改为按方言生成 CREATE/ALTER/COMMENT/INDEX DDL;LowcodeDdlRepository 对 Oracle NUMBER(18/19,0) 主键类型做兼容判断。GenDatasourceServiceImpl 的表导入从 MySQL information_schema 硬编码改为按方言 SQL 查询;数据源默认连接测试 SQL 支持 Oracle SELECT 1 FROM DUAL。forge-admin-ui/src/views/generator/datasource.vue 在选择 Oracle 时自动填充驱动类和测试 SQL。验证命令与结果:
cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-generator 及依赖模块编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-business/forge-business-core -am compile -DskipTests
forge-business-core 及依赖模块编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-app-server -am compile -DskipTests
forge-app-server 及依赖模块编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 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
com.oracle.database.jdbc:ojdbc8:jar:21.9.0.0:compile。source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/generator/datasource.vue --fix
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
警告:
// 注释 minify warning、UserSelectModal 组件命名冲突提示,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,未阻断。跳过项:
test-spec.md 记录为 P1 集成验证。服务清理:
执行时间:2026-06-22 16:38:50 CST
变更范围:
forge-starter-datascope 将 sys_data_scope_config、角色数据范围、自定义组织、组织层级、行政区划父子关系统一作为平台控制面元数据,从 forge.datascope.metadata-datasource(默认 master)预加载为内存快照。sys_data_scope_config、sys_role、sys_org、sys_region_code 等平台表。IN (SELECT code FROM sys_region_code ...),改为从主库快照解析出业务库可执行的字符串等值或 IN (...) 条件;自定义 SQL 新增 #{regionCodes} 占位符。forge.datascope.metadata-datasource 和 forge.datascope.default-config-tenant-id 配置项。LambdaQueryWrapper 构建这批查询。验证命令与结果:
env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-framework/forge-starter-parent/forge-starter-datascope -am compile -DskipTests
forge-starter-datascope 及依赖模块编译成功,新增 Mapper XML 已复制到 target/classes。env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-admin-server -am compile -DskipTests
forge-starter-datascope、forge-starter-tenant、dynamic-datasource 和 forge-business-core 编译成功。git diff --check -- forge-server/forge-framework/forge-starter-parent/forge-starter-datascope code-copilot/changes/lowcode-runtime-datasource-isolation code-copilot/memory/decisions.md code-copilot/memory/pitfalls.md
git diff --check --no-index /dev/null <新增 Mapper XML 或 Java 文件>
DataScope*Mapper.xml、Sys*Mapper.xml 和 DataScopeRegionMapper.java 检查无输出;返回码 1 为 no-index 新文件差异的预期结果。警告:
DataScopeInterceptor、generator 和 admin 既有类,未阻断本轮验证。跳过项:
master + 租户业务库,调用带数据权限配置的业务 Mapper,确认业务 SQL 命中业务库且不再出现 Table '<业务库>.sys_data_scope_config' doesn't exist。服务清理:
执行时间:2026-06-22 15:31 CST
变更范围:
forge-admin-ui/src/views/business/datasource-debug.vue,提供租户选择、路由检测、写入测试记录、读取最近记录和 dsKey/当前数据库展示。forge-server/db/migration/V1.0.77__add_business_datasource_debug_menu.sql,注册“业务数据源调试”菜单和 /business/datasource-demo/* 调试接口 API 资源,并给 admin / 数据源管理相关角色授权。tasks.md 和 test-spec.md,把调试台作为租户业务数据源路由改造的前端验证入口。验证命令与结果:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/business/datasource-debug.vue --fix
datasource-debug.vue targeted eslint 无错误。source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
dist/assets/datasource-debug-*.js。env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-admin-server -am compile -DskipTests
forge-admin-server 及依赖模块编译成功。git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation forge-admin-ui/src/views/business/datasource-debug.vue forge-server/db/migration/V1.0.77__add_business_datasource_debug_menu.sql forge-server/forge-framework/forge-starter-parent/forge-starter-tenant forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/java/com/mdframe/forge/plugin/system/datasource forge-server/forge-business/forge-business-core/src/main/java/com/mdframe/forge/business/core/demo forge-server/forge-business/forge-business-core/src/main/resources/mapper/business/BusinessDatasourceDemoMapper.xml
git diff --check --no-index /dev/null forge-admin-ui/src/views/business/datasource-debug.vue
--no-index 对新增文件返回码 1 属于正常差异返回。git diff --check --no-index /dev/null forge-server/db/migration/V1.0.77__add_business_datasource_debug_menu.sql
--no-index 对新增文件返回码 1 属于正常差异返回。ulimit -n 65535 && source ~/.nvm/nvm.sh && nvm use v20.19.0 && CHOKIDAR_USEPOLLING=true pnpm --dir forge-admin-ui exec vite --host 127.0.0.1 --port 5173
http://127.0.0.1:5173/。curl -I http://127.0.0.1:5173
HTTP/1.1 200 OK。警告:
// 注释 minify warning、UserSelectModal 组件命名冲突提示,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,未阻断。EMFILE: too many open files,已通过提高 ulimit 并开启 CHOKIDAR_USEPOLLING=true 解决。跳过项:
default_business_datasource_code 指向已注册 dynamic-datasource dsKey。服务清理:
26129,访问地址:http://127.0.0.1:5173/。执行时间:2026-06-22 15:09 CST
变更范围:
SystemLogServiceImpl 补全操作日志/登录日志用户信息时,通过 TenantContextHolder.executeIgnore 跨租户查询 SysUser,避免异步线程无租户上下文时被租户条件过滤。SystemLogServiceImpl 对 SysUser 查询结果增加 null 保护,查不到用户时不再调用 getUsername()。TenantBusinessDataSourceTaskDecorator 捕获、传播并恢复 TenantContextHolder.isIgnore() 状态,避免异步任务清掉系统级忽略租户标记。TenantBusinessDataSourceTaskDecoratorTest 增加忽略租户标记传播/恢复断言。test-spec.md 和 pitfalls.md 记录本轮回归范围与踩坑。验证命令与结果:
git diff --check -- forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/java/com/mdframe/forge/plugin/system/service/impl/SystemLogServiceImpl.java forge-server/forge-framework/forge-starter-parent/forge-starter-tenant/src/main/java/com/mdframe/forge/starter/tenant/datasource/TenantBusinessDataSourceTaskDecorator.java forge-server/forge-business/forge-business-core/src/test/java/com/mdframe/forge/business/core/datasource/TenantBusinessDataSourceTaskDecoratorTest.java code-copilot/changes/lowcode-runtime-datasource-isolation/test-spec.md code-copilot/memory/pitfalls.md
git diff --check --no-index /dev/null forge-server/forge-framework/forge-starter-parent/forge-starter-tenant/src/main/java/com/mdframe/forge/starter/tenant/datasource/TenantBusinessDataSourceTaskDecorator.java
--no-index 对比 /dev/null 的正常差异退出码。git diff --check --no-index /dev/null forge-server/forge-business/forge-business-core/src/test/java/com/mdframe/forge/business/core/datasource/TenantBusinessDataSourceTaskDecoratorTest.java
--no-index 对比 /dev/null 的正常差异退出码。cd forge-server && env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-admin-server -am compile -DskipTests
forge-admin-server 依赖链编译成功。cd forge-server && env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-framework/forge-plugin-parent/forge-plugin-system,forge-framework/forge-starter-parent/forge-starter-tenant,forge-business/forge-business-core -am clean compile -DskipTests
forge-starter-tenant、forge-plugin-system、forge-business-core 均重新 javac 编译成功。cd forge-server && env JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:/usr/local/apache-maven-3.9.3/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin mvn -pl forge-business/forge-business-core -am test -Dtest=TenantBusinessDataSourceTaskDecoratorTest -DskipTests=false -Dmaven.test.skip=false -Dmaven.compiler.skip=false
Not compiling test sources 和 Tests are skipped,本轮单测未实际执行。警告:
@Builder 默认值提示,未阻断。TenantBusinessDataSourceTaskDecoratorTest 只能作为后续测试配置修复后的回归用例,未实际运行。跳过项:
服务清理:
forge-business dynamic-datasource 纠偏实现验证执行时间:2026-06-22 11:50 CST
变更范围:
forge-starter-tenant 新增通用 @TenantBusinessDataSource、TenantBusinessDataSourceInfo、BusinessDataSourceProperties、TenantBusinessDataSourceResolver、TenantBusinessDataSourceAspect、TenantBusinessDataSourceExecutor、TenantBusinessDataSourceTaskDecorator 和线程池 BeanPostProcessor。forge-plugin-system 新增 SysTenantBusinessDataSourceResolver,基于 sys_tenant.default_business_datasource_code 和 business.datasource.tenant-routing-enabled 解析/校验租户业务 dsKey。forge-business-core 删除 BusinessTenantDataSourceResolver,新增 business/datasource-demo Mapper/XML 后端验证用例。BusinessJdbcTemplateProvider、旧 BusinessDataSourceExecutor 和独立 BusinessDataSourceContextHolder,业务主链路改为 MyBatis-Plus Mapper/XML + dynamic-datasource。gen_datasource 的监听和动态注册逻辑;业务租户数据源只选择已存在的 dynamic-datasource dsKey。V1.0.76__add_business_datasource_routing_config.sql 初始化 business.datasource.tenant-routing-enabled=false。application.yml 增加 forge.business.datasource.enabled=false 和 tenant-routing-enabled-default=false 默认配置。TenantBusinessDataSourceTaskDecoratorTest,覆盖异步任务租户和 dynamic-datasource 上下文传播/恢复。TenantBusinessDataSourceTaskDecorator 自动接入受 forge.business.datasource.enabled=true 控制,默认关闭时不覆盖系统线程池。forge-business-core 移除 forge-plugin-generator 依赖,避免业务租户数据源和低代码数据源生命周期耦合。forge-business-core 移除 forge-plugin-system 依赖,避免业务模块持有通用租户业务数据源解析逻辑。验证命令与结果:
git diff --check -- forge-server/forge-business/forge-business-core forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper/GenDatasourceMapper.xml forge-server/db/migration/V1.0.76__add_business_datasource_routing_config.sql forge-server/forge-admin-server/src/main/resources/application.yml code-copilot/changes/lowcode-runtime-datasource-isolation docs/superpowers/plans/2026-06-22-tenant-business-datasource-routing.md
cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-business/forge-business-core -am compile -DskipTests
forge-plugin-generator、forge-business-core 及依赖模块编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-admin-server -am compile -DskipTests
forge-starter-tenant 通用类、forge-business-core demo 和 forge-admin-server 入口聚合编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-admin-server -am compile -DskipTests
gen_datasource,forge-business-core 移除 forge-plugin-generator 依赖后 admin 聚合编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-admin-server -am compile -DskipTests
SysTenantBusinessDataSourceResolver 下沉到 forge-plugin-system,forge-business-core 删除 resolver 和 forge-plugin-system 依赖后 admin 聚合编译成功。cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-business/forge-business-core -am test -Dtest=TenantBusinessDataSourceTaskDecoratorTest -Dskip=false -DskipTests=false -Dmaven.test.skip=false -Dmaven.compiler.skip=false
testCompile 显示 Not compiling test sources、surefire 显示 Tests are skipped,测试源未实际执行。警告:
DefaultDataSourceCreator,实现按实际 API 使用 DataSourceCreator 列表选择 Hikari/Druid/Basic 创建器。跳过项:
business/datasource-demo 用例,真实启用后可用 POST /business/datasource-demo/prepare?tenantId=<id>&title=... 和 GET /business/datasource-demo/list?tenantId=<id> 手工验证。TenantBusinessDataSourceTaskDecoratorTest 已提交,但受父 POM 测试跳过配置影响未实际运行;后续需统一调整 Maven 测试插件配置后执行。服务清理:
变更范围:
forge-business 新增租户默认业务数据源解析器、上下文、JDBC 模板提供器和执行器;显式上下文优先,租户默认配置次之,未配置时回退主库。LOWCODE_RUNTIME 过滤数据源,业务对象向导按 TENANT_BUSINESS 过滤数据源。验证命令与结果:
git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator forge-server/forge-framework/forge-plugin-parent/forge-plugin-system forge-server/forge-business/forge-business-core forge-server/db/migration/V1.0.75__add_lowcode_runtime_datasource_fields.sql forge-admin-ui/src/views/generator/datasource.vue forge-admin-ui/src/views/system/tenant.vue forge-admin-ui/src/api/lowcode-crud.js forge-admin-ui/src/api/business-app.js forge-admin-ui/src/components/lowcode-builder/model/LowcodeModelImportModal.vue forge-admin-ui/src/views/ai/lowcode-models.vue forge-admin-ui/src/views/app-center/components/BusinessObjectWizardDrawer.vue
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-generator 及依赖模块编译成功。JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-business/forge-business-core -am compile -DskipTests
forge-business-core 及依赖模块编译成功。source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/system/tenant.vue src/views/generator/datasource.vue src/api/lowcode-crud.js src/api/business-app.js src/components/lowcode-builder/model/LowcodeModelImportModal.vue src/views/ai/lowcode-models.vue src/views/app-center/components/BusinessObjectWizardDrawer.vue --fix
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
警告:
// 注释 minify warning、UserSelectModal 组件命名冲突提示,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,未阻断。跳过项:
pnpm lint:fix,原因是该命令会扫描并可能自动修复大量非本变更文件;本轮改为对触达文件执行 targeted eslint。tasks.md 保留为后续验收项。服务清理:
变更范围:
LowcodeDdlRepository 改为通过运行时上下文选择 JdbcTemplate 和数据库方言,表/列/索引/主键元数据查询不再固定主库。LowcodeDdlService 预览、执行、发布校验按模型绑定运行数据源执行;已有表主键要求调整为单字段主键,不再强制 id 自增。LowcodeRuntimeDataSourceContextHolder,DynamicCrudRepository SQL 执行点按当前运行上下文选择 NamedParameterJdbcTemplate。datasourceId + tableName 维度,避免同名表跨库串缓存。验证命令与结果:
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-generator 及依赖模块编译成功。git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/resources/mapper forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/java forge-server/forge-framework/forge-plugin-parent/forge-plugin-system/src/main/resources/mapper forge-server/db/migration/V1.0.75__add_lowcode_runtime_datasource_fields.sql
警告:
跳过项:
服务清理:
变更范围:
BusinessObjectPublishService 新增运行数据源发布检查项:目标库、运行表、运行主键、只读、写入、DDL 和高风险提示;表结构检查结合数据源 allowDdl 和 DDL preview executable 决定阻断/警告。BusinessEventPublisher、BusinessTriggerSchedulerService、BusinessTriggerExecutor 按动态 CRUD 发布配置解析运行主键,触发器创建/更新关联记录不再强制 id 或 Long。StoredAggregateRefreshService 和 DynamicCrudService 的聚合公式刷新链路支持任意单字段主键,并在父对象运行数据源上下文内查询和回写。BusinessPublishChecklist.vue 新增发布目标库摘要面板,直接展示后端 DATASOURCE_* 就绪度检查和风险标签。验证命令与结果:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/BusinessPublishChecklist.vue --fix
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-generator 及依赖模块编译成功。source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectPublishService.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessEventPublisher.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerExecutor.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessTriggerSchedulerService.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/formula/StoredAggregateRefreshService.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/DynamicCrudService.java forge-admin-ui/src/views/app-center/components/designer/BusinessPublishChecklist.vue
警告:
// 注释 minify warning、UserSelectModal 组件命名冲突提示,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,未阻断。跳过项:
Long recordId,涉及 ai_business_flow_instance_link 表字段和接口协议迁移,已作为后续改造项记录,不在本轮小补丁中扩大修改面。服务清理:
userNick 兼容修复验证执行时间:2026-06-21 21:21:07 CST
变更范围:
userNick 这类 lowerCamel,默认数据库列名改为 camelToSnake(fieldCode),新建 Forge 托管字段生成 user_nick。userNick 这类安全 SQL 标识符,避免误报 数据库列名格式不正确: userNick。验证命令与结果:
git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation/test-spec.md code-copilot/changes/lowcode-runtime-datasource-isolation/execution-log.md code-copilot/memory/pitfalls.md forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeSchemaValidator.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/lowcode/LowcodeDdlService.java forge-admin-ui/src/views/app-center/components/designer/forge-form-designer/ForgePropertyPanel.vue
cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-generator 及依赖模块编译成功。source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/designer/forge-form-designer/ForgePropertyPanel.vue --fix
ForgePropertyPanel.vue targeted eslint 无错误。source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
警告:
// 注释 minify warning、UserSelectModal 组件命名冲突提示,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,未阻断。跳过项:
userNick 字段的端到端发布验证需要准备外部业务库连接。test-spec.md 记录为 P1 回归用例:新字段默认 user_nick,旧表真实列名 userNick 可通过 Schema 校验。服务清理:
执行时间:2026-06-21 21:33:02 CST
变更范围:
BusinessObjectWizardDrawer.vue 在创建方式步骤常驻展示“运行数据源”,空白创建、数据库导入、AI 生成三种模式都能选择低代码运行目标库。LOWCODE_RUNTIME 过滤;数据库导入模式复用运行数据源加载数据表,不再使用租户业务模块 TENANT_BUSINESS 口径。runtimeDatasourceId,并在对象 options 中保存 runtimeDatasourceId/runtimeDatasource 快照。BusinessObjectDesignerService 从业务对象 options 回填默认模型 runtimeDatasource,保存草稿时同步写入 ai_lowcode_model 与 ai_crud_config 的运行数据源字段。验证命令与结果:
git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation/test-spec.md code-copilot/changes/lowcode-runtime-datasource-isolation/execution-log.md code-copilot/memory/pitfalls.md forge-admin-ui/src/views/app-center/components/BusinessObjectWizardDrawer.vue forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/dto/businessapp/BusinessObjectDTO.java forge-server/forge-framework/forge-plugin-parent/forge-plugin-generator/src/main/java/com/mdframe/forge/plugin/generator/service/businessapp/BusinessObjectDesignerService.java
source ~/.nvm/nvm.sh && nvm use v20.19.0 && pnpm --dir forge-admin-ui exec eslint src/views/app-center/components/BusinessObjectWizardDrawer.vue --fix
cd forge-server && JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
forge-plugin-generator 及依赖模块编译成功。source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
警告:
// 注释 minify warning、UserSelectModal 组件命名冲突提示,以及 src/store/index.js 同时动态/静态导入导致的 chunk 提示,未阻断。跳过项:
LOWCODE_RUNTIME 数据源配置。服务清理:
forge-business 多数据源方案文档纠偏执行时间:2026-06-22 10:46 CST
变更范围:
spec.md:明确 forge-business 多数据源不能以 BusinessJdbcTemplateProvider / 独立 ThreadLocal 作为主方案,必须接入 baomidou dynamic-datasource,让 MyBatis-Plus Mapper/XML 透明切换到租户业务库。forge.business.datasource.enabled + business.datasource.tenant-routing-enabled,关闭时显式声明业务方法统一走 master。@Async、线程池、事件监听和定时任务必须显式传播 tenantId 与 dynamic-datasource key,任务结束后清理上下文。tasks.md:阶段五从“已完成”调整为“租户字段已完成,ORM 路由需纠偏”,新增注解、AOP、动态数据源注册、执行器、TaskDecorator 和测试任务。test-spec.md:历史 JDBC 模板验证不再作为阶段五验收标准,新增 forge-business dynamic-datasource 纠偏验证矩阵。验证命令与结果:
git diff --check -- code-copilot/changes/lowcode-runtime-datasource-isolation/spec.md code-copilot/changes/lowcode-runtime-datasource-isolation/tasks.md code-copilot/changes/lowcode-runtime-datasource-isolation/test-spec.md
rg -n "forge-business/forge-business-core|Business datasource correction|dynamic-datasource 纠偏|tenant-routing-enabled|BusinessJdbcTemplateProvider|MyBatis-Plus Mapper/XML|TaskDecorator" code-copilot/changes/lowcode-runtime-datasource-isolation/spec.md code-copilot/changes/lowcode-runtime-datasource-isolation/tasks.md code-copilot/changes/lowcode-runtime-datasource-isolation/test-spec.md -S
警告:
spec.md;本地浏览和 curl 未返回页面正文,本轮按官方公开使用模型和项目已有依赖设计文档。跳过项:
服务清理: