- 通用 ChangesEngine:snapshot 钉住 data_cutoff_at、(modify_time,id) 复合游标、 仅最后一页签发 next_sync_token、软删 tombstone;sync_token/cursor 为 HMAC-SHA256 无状态令牌(SyncTokenCodec),过期/篡改/跨快照/数据域变更 统一 SYNC_CURSOR_EXPIRED - 注册式实体扩展:SyncEntity/Registry + users(m0.user)/properties(m0.properyt)/ contracts(m2.contract_new) 三个实现;生效修改时间 COALESCE(modify_time, create_time) - 硬约束:GuardedToolCallback 对 *.changes.list 拒绝 tenant_id/scope 入参, 数据域只从 Token 推导;行级权限复用 PermissionService 与 QUERY 工具同一 ACL - 资源隔离:RateLimitService SYNC/QUERY 分档限流(Redis 固定分钟窗)、 limit≤200 截断、SyncQueryTimeoutInterceptor 慢查询超时(三套 SqlSessionFactory 接入) - contract.list.query 补齐 12 字段、contract.detail.query 补 version(ACL 不变) - V5 migration:tool.description 512→1024(含 sql/rollback 回滚文件) - seed-dev.sql:三个 changes 工具绑定进 sync 作用域 - 修复:properyt.customerId 为 NULL 时 Collectors.toMap NPE(冒烟命中), 改为 put 逐条装填(ContractsSyncEntity/ContractTools)
数据库迁移规范
自有库结构由 Flyway 管理,运行时只扫描 src/main/resources/db/migration。
- 已合并的
V<N>__description.sql永不修改、删除或改名;Flyway 与测试都会校验历史 checksum。 - 每次结构或数据变更新增下一个连续版本,并同步新增
sql/rollback/V<N>__description.down.sql。 - Migration 只操作当前 svc schema,禁止包含
CREATE DATABASE、USE和环境专属数据。 - DDL 优先向后兼容;删除字段或表必须先经过废弃版本。大表变更必须给出锁表时间与分批方案。
seed-dev.sql仅用于开发数据,不进入 Flyway。数据库首次创建使用bootstrap/create-database.sql。- 合并前必须运行
./mvnw clean package;部署启动时 Flyway 会再次 validate 并按版本迁移,失败则应用不会启动。
baseline-on-migrate 默认关闭,避免连错非空库时被静默接管。已有 V1 数据库首次接入时,显式设置 SVC_FLYWAY_BASELINE_ON_MIGRATE=true:Flyway 记录 V1 基线并只执行 V2 以后版本;确认生成 flyway_schema_history 后立即恢复为 false。空数据库无需开启,会正常执行全部版本。