介绍

因为业务需求新项目的流水号系统从 ‘数据库自增步长+分段式锁’ 换成使用 雪花流水号, 修改机器标识和数据中心字段为自动获取ip后三位, 人工保证ip后三位不相同

示例

雪花流水号 - 改造版
修改内容如下:
删除构造, 修改数据位数, 添加静态代码块

  1. private final static long MACHINE_BIT = 8;
  2. private final static long DATA_CENTER_BIT = 2;
  3. static {
  4. try {
  5. InetAddress localHost = InetAddress.getLocalHost();
  6. address = localHost.getAddress()[3] & 0xff;
  7. System.out.println("当前系统的 address 为: " + address);
  8. } catch (UnknownHostException e) {
  9. throw new IllegalArgumentException("DATA_CENTER_ID can't be greater than MAX_DATA_CENTER_NUM or less than 0");
  10. }
  11. }

注意点

服务器配置host

服务器对应的 hostname 需要配置ip地址

  1. cat /etc/hosts

byte 转换 long需要 & 0xff

当获取ip大于127时转换出来为负值, 所以需要 & 0xff