mjava-pro/(非直接 cp mcli,精简依赖)pom.xml artifactId=mjava-pro,依赖仅 mjava 基座Boot.java package=com.malk.pro,@EnableScheduling + @EnableJpaAuditing + scanBasePackages=com.malkapplication.yml port=9010 / context-path=/api/pro / spel.scheduling=true / multiSource=falsepom.xml <modules> 追加 mjava-promvn -pl mjava-pro -am compile 通过(2026-04-19 验证)TenantProfile + VendorCredential 数据类TenantContext(ThreadLocal + set/current/clear/propagate + currentTenantId)TenantInterceptor(preHandle 读 X-Tenant-Id → registry.get → TenantContext.set + MDC;afterCompletion clear;401 TENANT_REQUIRED / 403 TENANT_NOT_FOUND)ProWebConfig 注册拦截器,排除 /_admin/** / /actuator/** / /static/** 等TenantRegistryService(依赖 YDClient_Form,使用新原子接口 searchForm)loadAll() 按 formUuid 分页查宜搭应用表 → mergeRow 合并同 tenantId 多 vendor → Map<String, TenantProfile>get(tenantId) / contains / size 内存 Map 直查(缓存 miss 不触发单条拉取,等下次 TTL 刷新)@PostConstruct init() + @Scheduled(fixedDelayString=ttl*1000) 定时刷新;failFast 开关控制启动失败行为AdminController @Profile("dev") @NoAuth POST /_admin/reloadTenantcom.malk.pro.service.dingtalk.DynamicDDService:从 TenantContext 读凭据 → 构造 DDConf → 调基座 DDClientDynamicYDService(对接宜搭)、其他 vendor 按需UtilToken 使用规范:key 统一 {tenantId}:{vendor}:{appKey}(若基座未扩展 namespace,就在调用侧拼)UtilHttp 审计日志扩展字段 tenantId(从 MDC 读);改基座或在 pro 侧包一层./log/{日期}/pro-%X{tenantId}.logapplication-dev.yml.example(含 tenant.registry.* 占位)application-prod.yml.example(含 tenant.registry.* 占位)README.md(在 mjava-pro 目录下,说明新增租户操作步骤)/Users/malk/Desktop/Tech/claude/后端/mjava-baseline.md 表格里 mjava-pro 状态改为"已实施"TenantContextTest(set/clear/异步传播)X-Tenant-Id 调同一接口 → 验证 token 隔离 + 审计日志分片/opsx:validate add-mjava-pro --strict 通过