Skip to content

Commit

Permalink
v2.7.0 代码优化,新增异常类
Browse files Browse the repository at this point in the history
  • Loading branch information
ALI1416 committed Jul 27, 2023
1 parent ac02b37 commit ef3a644
Show file tree
Hide file tree
Showing 6 changed files with 252 additions and 255 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
# 更新日志

## v2.7.0 `2023.7.27`

- 代码优化
- 新增异常类

## v2.6.0 `2023.6.12`

- 版本升级
Expand Down
184 changes: 90 additions & 94 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@
<dependency>
<groupId>cn.404z</groupId>
<artifactId>id</artifactId>
<version>2.6.0</version>
<version>2.7.0</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.7</version>
<version>1.4.8</version>
</dependency>
```

Expand All @@ -38,16 +38,16 @@
代码

```java
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
```

结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.IdTest - ID为:5483442415337472
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.IdTest -- ID 84916544812875776
```

### 手动初始化
Expand All @@ -56,19 +56,19 @@ log.info("ID为:{}", Id.next());

```java
Id.init(0, 8, 14);
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
```

结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.Id - 手动初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为14
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为16384,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为69年,失效日期为2090-09-07 23:47:35.551
[main] INFO cn.z.id.IdTest - ID为:21934128022683648
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.Id -- 手动初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 14
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 16384 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 69 年,失效时间 2090-09-07 23:47:35.551
INFO cn.z.id.IdTest -- ID 339667266901639168
```

## 异常处理
Expand All @@ -80,41 +80,41 @@ log.info("ID为:{}", Id.next());
```java
Id.init(0, 8, 13);
Id.init(0, 8, 15);
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
```

结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.Id - 手动初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为13
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为8192,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为139年,失效日期为2160-05-15 15:35:11.103
[main] WARN cn.z.id.Id - 已经初始化过了,不可重复初始化!
[main] INFO cn.z.id.IdTest - ID为:10967292061941760
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.Id -- 手动初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 13
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 8192 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 139 年,失效时间 2160-05-15 15:35:11.103
WARN cn.z.id.Id -- 已经初始化过了,不可重复初始化!
INFO cn.z.id.IdTest -- ID 169833687997743104
```

### 初始化晚了

代码

```java
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
Id.init(0, 8, 12);
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
```

结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] WARN cn.z.id.Id - 已经初始化过了,不可重复初始化!
[main] INFO cn.z.id.IdTest - ID为:5483684734959616
[main] INFO cn.z.id.IdTest - ID为:5483684734959617
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.IdTest -- ID 84916883292160000
WARN cn.z.id.Id -- 已经初始化过了,不可重复初始化!
INFO cn.z.id.IdTest -- ID 84916883292160001
```

### 初始化异常
Expand All @@ -123,24 +123,19 @@ log.info("ID为:{}", Id.next());

```java
Id.init(1000, 8, 12);
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
```

结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.Id - 手动初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为1000,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] ERROR cn.z.id.Id - 机器码MACHINE_ID需要>=0并且<=255。当前为1000
java.lang.Exception: 机器码无效
[main] ERROR cn.z.id.Id - 重置初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.IdTest - ID为:5483719912587264
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.Id -- 手动初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 1000 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
cn.z.id.IdException: 机器码MACHINE_ID 1000 无效!应为 [0,255]
```

### 阻塞
Expand All @@ -150,28 +145,28 @@ java.lang.Exception: 机器码无效
```java
// 初始化,复现阻塞
Id.init(0, 0, 0);
log.info("ID为:{}", Id.next());
log.info("ID为:{}", Id.next());
log.info("ID为:{}", Id.next());
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
log.info("ID {}", Id.next());
log.info("ID {}", Id.next());
log.info("ID {}", Id.next());
```

结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.Id - 手动初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为0,SEQUENCE_BITS为0
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为0,1ms内最多生成Id数量为1,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为292471208年,失效日期为292269004-12-03 00:47:04.191
[main] WARN cn.z.id.Id - 检测到阻塞,时间为2021-03-02 20:44:07.469,最大序列号为0
[main] WARN cn.z.id.Id - 检测到阻塞,时间为2021-03-02 20:44:07.485,最大序列号为0
[main] INFO cn.z.id.IdTest - ID为:5229847469
[main] INFO cn.z.id.IdTest - ID为:5229847485
[main] INFO cn.z.id.IdTest - ID为:5229847500
[main] WARN cn.z.id.Id - 检测到阻塞,时间为2021-03-02 20:44:07.5,最大序列号为0
[main] INFO cn.z.id.IdTest - ID为:5229847516
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.Id -- 手动初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 0 ,序列号位数SEQUENCE_BITS 0
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 0 ,1ms内最多生成ID数量 1 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 292471208 年,失效时间 292269004-12-03 00:47:04.191
INFO cn.z.id.IdTest -- ID 80983144609
WARN cn.z.id.Id -- 检测到阻塞,时间 2023-07-27 15:19:04.609 ,最大序列号 0
INFO cn.z.id.IdTest -- ID 80983144625
WARN cn.z.id.Id -- 检测到阻塞,时间 2023-07-27 15:19:04.625 ,最大序列号 0
INFO cn.z.id.IdTest -- ID 80983144626
WARN cn.z.id.Id -- 检测到阻塞,时间 2023-07-27 15:19:04.626 ,最大序列号 0
INFO cn.z.id.IdTest -- ID 80983144641
```

### 时钟回拨(需要在1分钟内手动回拨时钟)
Expand All @@ -180,7 +175,7 @@ log.info("ID为:{}", Id.next());

```java
for (int i = 0; i < 60; i++) {
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
try {
Thread.sleep(1000);
} catch (Exception ignore) {
Expand All @@ -192,12 +187,14 @@ for (int i = 0; i < 60; i++) {
结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.IdTest - ID为:5483989976481792
[main] WARN cn.z.id.Id - 监测到系统时钟发生了回拨。回拨时间为2021-03-02 19:45:33.249,上一个生成的时间为2021-03-02 20:45:40.392
[main] INFO cn.z.id.IdTest - ID为:5483989977530368
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.IdTest -- ID 84917057323270144
INFO cn.z.id.IdTest -- ID 84917058381283328
WARN cn.z.id.Id -- 监测到系统时钟发生了回拨。回拨时间 2023-07-27 15:17:59.316 ,上一个生成的时间 2023-07-27 15:20:17.603
INFO cn.z.id.IdTest -- ID 84917058382331904
INFO cn.z.id.IdTest -- ID 84917059429859328
```

### 重置初始时间戳(需要在1分钟内手动回拨时钟)
Expand All @@ -206,7 +203,7 @@ for (int i = 0; i < 60; i++) {

```java
for (int i = 0; i < 60; i++) {
log.info("ID为:{}", Id.next());
log.info("ID {}", Id.next());
try {
Thread.sleep(1000);
} catch (Exception ignore) {
Expand All @@ -219,17 +216,16 @@ for (int i = 0; i < 60; i++) {
结果

```txt
[main] INFO cn.z.id.Id - 预初始化...
[main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
[main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
[main] INFO cn.z.id.IdTest - ID为:23564520900263936
[main] INFO cn.z.id.Id - 重置初始时间戳,时钟总共回拨0毫秒
[main] INFO cn.z.id.IdTest - 总共回拨时间为:0毫秒
[main] WARN cn.z.id.Id - 监测到系统时钟发生了回拨。回拨时间为2021-09-18 10:25:55.498,上一个生成的时间为2021-09-18 10:27:58.361
[main] INFO cn.z.id.IdTest - ID为:23564520901312512
[main] INFO cn.z.id.Id - 重置初始时间戳,时钟总共回拨122864毫秒
[main] INFO cn.z.id.IdTest - 总共回拨时间为:122864毫秒
[main] INFO cn.z.id.IdTest - ID为:23564393127084032
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.IdTest -- ID 84917178671824896
INFO cn.z.id.Id -- 重置开始时间戳,时钟总共回拨 0 毫秒
INFO cn.z.id.IdTest -- 总共回拨时间为:0毫秒
WARN cn.z.id.Id -- 监测到系统时钟发生了回拨。回拨时间 2023-07-27 15:20:05.313 ,上一个生成的时间 2023-07-27 15:22:15.352
INFO cn.z.id.IdTest -- ID 84917181851107328
INFO cn.z.id.Id -- 重置开始时间戳,时钟总共回拨 130040 毫秒
INFO cn.z.id.IdTest -- 总共回拨时间为:130040毫秒
```

## 工具测试
Expand Down Expand Up @@ -259,19 +255,19 @@ log.info(String.valueOf(IdUtil.format(parse2[1], 8L, 12L, parse2[0], parse2[2]))
结果

```txt
14:03:35.661 [main] INFO cn.z.id.Id - 预初始化...
14:03:35.665 [main] INFO cn.z.id.Id - 初始化,MACHINE_ID为0,MACHINE_BITS为8,SEQUENCE_BITS为12
14:03:35.667 [main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为255,1ms内最多生成Id数量为4096,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为278年,失效日期为2299-09-27 23:10:22.207
14:03:35.672 [main] INFO cn.z.id.Id - 手动初始化...
14:03:35.672 [main] INFO cn.z.id.Id - 初始化,MACHINE_ID为3,MACHINE_BITS为4,SEQUENCE_BITS为5
14:03:35.672 [main] INFO cn.z.id.Id - 最大机器码MACHINE_ID为15,1ms内最多生成Id数量为32,时钟最早回拨到2021-01-01 08:00:00.0,可使用时间大约为571232年,失效日期为572874-07-26 01:58:01.983
[main] INFO cn.z.id.IdTest - [3, 4, 5]
[main] INFO cn.z.id.IdTest - 20448571222112
[main] INFO cn.z.id.IdTest - [1649397815668, 3, 0]
[main] INFO cn.z.id.IdTest - 20448571222112
[main] INFO cn.z.id.IdTest - 20448571222113
[main] INFO cn.z.id.IdTest - [1609478701277, 46, 2144]
[main] INFO cn.z.id.IdTest - 20448571222112
INFO cn.z.id.Id -- 预初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 0 ,机器码位数MACHINE_BITS 8 ,序列号位数SEQUENCE_BITS 12
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 255 ,1ms内最多生成ID数量 4096 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 278 年,失效时间 2299-09-27 23:10:22.207
INFO cn.z.id.Id -- 手动初始化...
INFO cn.z.id.Id -- 机器码MACHINE_ID 3 ,机器码位数MACHINE_BITS 4 ,序列号位数SEQUENCE_BITS 5
INFO cn.z.id.Id -- 最大机器码MACHINE_ID 15 ,1ms内最多生成ID数量 32 ,时钟最早回拨到 2021-01-01 08:00:00.0 ,可使用时间大约 571232 年,失效时间 572874-07-26 01:58:01.983
INFO cn.z.id.IdTest -- [3, 4, 5]
INFO cn.z.id.IdTest -- 20448571222112
INFO cn.z.id.IdTest -- [1649397815668, 3, 0]
INFO cn.z.id.IdTest -- 20448571222112
INFO cn.z.id.IdTest -- 20448571222113
INFO cn.z.id.IdTest -- [1609478701277, 46, 2144]
INFO cn.z.id.IdTest -- 20448571222112
```

更多请见[测试](./src/test)
Expand Down
6 changes: 3 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
<modelVersion>4.0.0</modelVersion>

<artifactId>id</artifactId>
<version>2.6.0</version>
<version>2.7.0</version>

<parent>
<groupId>cn.404z</groupId>
Expand All @@ -30,14 +30,14 @@
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.4.7</version>
<version>1.4.8</version>
<scope>provided</scope>
</dependency>
<!-- 仅供测试使用 -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.9.3</version>
<version>5.10.0</version>
<scope>test</scope>
</dependency>
<dependency>
Expand Down

0 comments on commit ef3a644

Please sign in to comment.