状态(2026-04-18 立项):提案阶段,未实施 优先级:高。与
add-mjava-com并行,共同承担"多用户/多客户使用支持"大方向。
现有 mjava-mcli / mjava-shunfeng / mjava-guangming 三个客户子项目采用"一客户一 jar"模式,每次加新客户都要:
application-{profile}.yml 硬编码该客户的 appKey/appSecret/corpId这种方式在客户数量少(≤ 5)时尚可,但问题:
需要一个支持"一个 jar 同时服务多个客户"的子项目模板 mjava-pro,按请求上下文动态加载客户配置、token 按租户隔离缓存,加客户 = 新增一条宜搭应用表记录,无需改代码和重启。
新增子模块 mjava-pro/,具备以下能力:
X-Tenant-Id header(或 subdomain / path prefix,实现时选定),未识别到返回 401application.yml)按 tenantId 查询 appKey / appSecret / corpId / 其他授权参数;命中后缓存到内存(TTL 可配,默认 10 分钟)UtilToken key 扩展为 {tenant}:{vendor}:{appKey},各租户独立缓存不互相覆盖DDClient / YDClient 等保持原签名不变;mjava-pro 内部通过 TenantContext(ThreadLocal)传 appKey/appSecret 进去spec.md 中(tenantId / vendor / appKey / appSecret / extraJson / enabled / ...)multi-tenant-runtime:单部署多租户运行时,按请求上下文路由到对应客户配置tenant-registry:从宜搭应用表加载租户配置的注册中心抽象mjava-pro/(独立 jar,默认端口 9010,context-path /api/pro)TenantContext.java + TenantInterceptor.java(ThreadLocal 管理)TenantRegistryService.java(查宜搭应用表)DynamicDDClientProxy.java(包装基座 DDClient,按 tenant 注入凭据)application.yml + application-{dev,prod}.yml.exampleUtilToken 支持 key 命名空间;评估后若需要再开子提案TimedCache,单实例足够;若将来多实例再评估)