Skip to content

Commit 6f12566

Browse files
committed
change packate name
1 parent 12fcbdf commit 6f12566

File tree

1 file changed

+161
-0
lines changed

1 file changed

+161
-0
lines changed

README.md

Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
2+
uid-generator-spring-boot
3+
==========================
4+
5+
UidGenerator是Java实现的, 基于[Snowflake](https://github.com/twitter/snowflake)算法的唯一ID生成器。
6+
7+
基与 [Snowflake](https://github.com/twitter/snowflake)[百度UidGenerator](https://github.com/baidu/uid-generator)[uid-generator-spring-boot-starter](https://github.com/wujun234/uid-generator-spring-boot-starter)
8+
9+
10+
* 更改了打包结构,抽出了Worker node id的生成接口, 使其可以自定义实现分配 Worker node id的方法, 本项目中实现了两种数据库存储的方法:
11+
* 支持 Spring boot Autoconfigure
12+
* 支持 jdbc 和 r2dbc 两种数据库连接方式
13+
14+
* mybatis jdbc 实现 [uid-worker-id-jdbc-spring-boot-starter](https://github.com/cooperlyt/uid-generator-spring-boot/tree/master/uid-worker-id-jdbc-spring-boot-starter)
15+
* mybatis r2dbc 实现 [uid-worker-id-r2dbc-spring-boot-start](https://github.com/cooperlyt/uid-generator-spring-boot/tree/master/uid-worker-id-r2dbc-spring-boot-starter)
16+
17+
你以可以根据[接口包](https://github.com/cooperlyt/uid-generator-spring-boot/tree/master/uid-generator-api)自己实现Worker node分配的实现
18+
19+
## 原理和性能
20+
21+
请参见[Snowflake](https://github.com/twitter/snowflake)[百度UidGenerator](https://github.com/baidu/uid-generator)
22+
23+
## 使用
24+
25+
### Maven
26+
27+
### spring boot autoconfig 方式
28+
```xml
29+
<dependency>
30+
<groupId>uid-generator-spring-boot-starter</groupId>
31+
<artifactId>uid</artifactId>
32+
<version>1.0.3.RELEASE</version>
33+
</dependency>
34+
35+
<!-- 选择一种 worker node 分配方式 -->
36+
37+
<!-- jdbc -->
38+
39+
<dependency>
40+
<groupId>cooperlyt.github.io</groupId>
41+
<artifactId>uid-worker-id-jdbc-spring-boot-starter</artifactId>
42+
<version>1.0.1.BATE</version>
43+
</dependency>
44+
45+
<!-- 选择你的数据库jdbc驱动 -->
46+
<dependency>
47+
<groupId>org.mariadb.jdbc</groupId>
48+
<artifactId>mariadb-java-client</artifactId>
49+
</dependency>
50+
51+
<!-- r2dbc -->
52+
53+
<dependency>
54+
<groupId>io.github.cooperlyt</groupId>
55+
<artifactId>uid-worker-id-r2dbc-spring-boot-starter</artifactId>
56+
<version>1.0.1.BATE</version>
57+
</dependency>
58+
59+
<!-- 选择你的数据库据r2dbc驱动 -->
60+
<dependency>
61+
<groupId>org.mariadb</groupId>
62+
<artifactId>r2dbc-mariadb</artifactId>
63+
<version>1.1.3</version>
64+
</dependency>
65+
66+
```
67+
### spring方式 请参见 [百度UidGenerator](https://github.com/baidu/uid-generator)
68+
69+
### 数据库(可选)
70+
如使用数据库实现的Worker node id分配器,需要先建立表 WORKER_NODE, 脚本:
71+
```sql
72+
DROP TABLE IF EXISTS WORKER_NODE;
73+
CREATE TABLE WORKER_NODE
74+
(
75+
ID BIGINT NOT NULL AUTO_INCREMENT COMMENT 'auto increment id',
76+
HOST_NAME VARCHAR(64) NOT NULL COMMENT 'host name',
77+
PORT VARCHAR(64) NOT NULL COMMENT 'port',
78+
TYPE INT NOT NULL COMMENT 'node type: CONTAINER(1), ACTUAL(2), FAKE(3)',
79+
LAUNCH_DATE DATE NOT NULL COMMENT 'launch date',
80+
MODIFIED TIMESTAMP NOT NULL COMMENT 'modified time',
81+
CREATED TIMESTAMP NOT NULL COMMENT 'created time',
82+
PRIMARY KEY(ID)
83+
) COMMENT='DB WorkerID Assigner for UID Generator',ENGINE = INNODB;
84+
```
85+
86+
### spring boot 配置
87+
88+
#### ID 生成 配置
89+
```yml
90+
uid:
91+
timeBits: 30 # 时间位, 默认:30
92+
workerBits: 16 # 机器位, 默认:16
93+
seqBits: 7 # 序列号, 默认:7
94+
epochStr: "2019-02-20" # 初始时间, 默认:"2019-02-20"
95+
enableBackward: true # 是否容忍时钟回拨, 默认:true
96+
maxBackwardSeconds: 1 # 时钟回拨最长容忍时间(秒), 默认:1
97+
CachedUidGenerator: # CachedUidGenerator相关参数
98+
boostPower: 3 # RingBuffer size扩容参数, 可提高UID生成的吞吐量, 默认:3
99+
paddingFactor: 50 # 指定何时向RingBuffer中填充UID, 取值为百分比(0, 100), 默认为50
100+
#scheduleInterval: 60 # 默认:不配置此项, 即不使用Schedule线程. 如需使用, 请指定Schedule线程时间间隔, 单位:秒
101+
```
102+
103+
#### jdbc 配置
104+
105+
```yml
106+
mybatis:
107+
configuration:
108+
default-fetch-size: 100
109+
default-statement-timeout: 30
110+
map-underscore-to-camel-case: true
111+
spring:
112+
datasource:
113+
driver-class-name: org.mariadb.jdbc.Driver
114+
url: jdbc:mariadb://127.0.0.1:3306/database?
115+
username: root
116+
password: ****
117+
```
118+
119+
#### r2dbc 配置
120+
121+
```yml
122+
123+
r2dbc:
124+
mybatis:
125+
mapper-locations: classpath:mapper/*.xml
126+
map-underscore-to-camel-case: true
127+
spring:
128+
r2dbc:
129+
mybatis:
130+
r2dbc-url: r2dbc:mysql://127.0.0.1:3306/database
131+
username: root
132+
password: ****
133+
pool:
134+
max-idle-time: PT3M
135+
validation-query: SELECT 1 FROM DUAL
136+
initial-size: 1
137+
max-size: 3
138+
acquire-retry: 3
139+
validation-depth: REMOTE
140+
max-create-connection-time: PT30S
141+
142+
```
143+
144+
#### 自定义 拒绝策略
145+
146+
```java
147+
@Bean
148+
RejectedPutBufferHandler customPutHandler() {
149+
return (r, i) -> {
150+
do your
151+
};
152+
}
153+
154+
@Bean
155+
RejectedTakeBufferHandler customTakeHandler() {
156+
return (r, i) -> {
157+
do your
158+
};
159+
}
160+
161+
```

0 commit comments

Comments
 (0)