迁移到 4.0
CosId 4.0 需要 Java 17 及以上和 Spring Boot 4.x。完整的破坏性变更列表,以及每个已移除 API 的替代方式,见迁移指南(英文)。本页列出大多数应用需要的步骤。
升级之前
- 先升级到最新的 3.4.x,并清理它的弃用告警。只支持从 3.4.x 滚动升级。
- 重新编译基于 CosId 3.x 编译的代码和库,包括 ShardingSphere 的 CosId 算法:
IdGeneratorProvider和LazyIdGenerator的部分签名有变化。 - 同一命名空间的所有实例使用相同的
cosid.machine.guarder.safe-guard-duration。
各后端的滚动升级
| 后端 | 需要做的事 |
|---|---|
| JDBC | 启动 4.0 实例前,执行添加 renew_time、watermark、lease_version 列的 ALTER TABLE(3.3 之前创建的表还需要 stable 列),见 JDBC |
| Redis | 无需操作:4.0 在 3.4 的键旁边新增租约哈希 |
| ZooKeeper、MongoDB | 无需操作:保留 3.4 格式 |
| Proxy | 先在 3.4.x 客户端上设置 cosid.proxy.token(3.4 会发送它,没有令牌的服务端会忽略它);再把 Proxy 服务端升级到 4.0,并在 cosid.proxy.server.auth.tokens 中配置同一个令牌;最后升级客户端。如果先升级服务端,没有令牌的 3.4 客户端会得到 401,见 CosId Proxy |
升级期间,3.4.x 与 4.0 实例可以共享同一命名空间。完整步骤见滚动升级。
配置
cosid.jdbc.enabled和cosid.actuator.delete.enabled默认为false。Spring Data JDBC 用户必须设置cosid.jdbc.enabled=true。- 移除了
cosid.machine.distributor.provider和cosid.segment.distributor.provider:type也会按getType()选择CosIdStoreProvider。 - 机器号的 Redis、ZooKeeper、MongoDB 超时以及
cosid.proxy.read-timeout必须为正数。 - 用类型化查找代替强制转换:
provider.getRequired("order", IdGenerator.class)。 - 分片算法移到
me.ahoo.cosid:cosid-sharding,访问器和@CosId移到me.ahoo.cosid:cosid-accessor。
并非所有变化都会在启动时失败:
- 关闭
cosid.jdbc.enabled时,Spring Data JDBC 实体保存时不会由 CosId 填充 ID:启动只会打印一条 INFO,列出这些实体。 - 用到已迁移到其它模块、但没有引入该模块的类时,会在首次加载时抛出
ClassNotFoundException或NoClassDefFoundError。 - 把只生成字符串的生成器按
IdGenerator查找,会在执行时抛出IllegalArgumentException,并指明两种类型。
配置错误会在启动时失败,错误信息会指明修复方式;见故障排查。
