Snowflake配置方式
分布式部署就需要分配不同的workId, 如果workId相同,可能会导致生成的id相同
分布式情况下,需要保证各个系统时间一致,如果服务器的时钟回拨,就会导致生成的 id 重复
配置实操
spring.shardingsphere.sharding.tables.product_order.key-generator.props.worker.id=1
方式一
@TableId(value = "id", type = IdType.ASSIGN_ID)
默认实现类为DefaultIdentifierGenerator雪花算法
方式二
使用Sharding-Jdbc配置文件,注释DO类里面的id分配策略
#id生成策略
spring.shardingsphere.sharding.tables.product_order.key-generator.column=id
spring.shardingsphere.sharding.tables.product_order.key-generator.type=SNOWFLAKE
动态指定sharding jdbc 的雪花算法中的属性work.id属性
使用sharding-jdbc中的使用IP后几位来做workId, 但在某些情况下会出现生成重复ID的情况
解决办法:在启动时给每个服务分配不同的workId, 引入redis/zk都行,缺点就是多了依赖