Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
yitter
雪花ID全家桶(SnowFlake IdGenerator)
提交
7aa0223c
雪
雪花ID全家桶(SnowFlake IdGenerator)
项目概览
yitter
/
雪花ID全家桶(SnowFlake IdGenerator)
11 个月 前同步成功
通知
201
Star
3
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
雪
雪花ID全家桶(SnowFlake IdGenerator)
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
7aa0223c
编写于
3月 26, 2021
作者:
Z
zhouzj
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
autocommit
上级
ca025ea7
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
124 addition
and
124 deletion
+124
-124
Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java
...ce/src/main/java/com/yitter/idgen/DefaultIdGenerator.java
+79
-79
Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java
Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java
+45
-45
未找到文件。
Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java
浏览文件 @
7aa0223c
/*
* 版权属于:yitter(yitter@126.com)
* 开源地址:https://gitee.com/yitter/idgenerator
*/
package
com.yitter.idgen
;
import
com.yitter.contract.ISnowWorker
;
import
com.yitter.contract.IdGeneratorException
;
import
com.yitter.contract.IdGeneratorOptions
;
import
com.yitter.contract.IIdGenerator
;
import
com.yitter.core.SnowWorkerM1
;
import
com.yitter.core.SnowWorkerM2
;
public
class
DefaultIdGenerator
implements
IIdGenerator
{
private
final
ISnowWorker
_SnowWorker
;
public
DefaultIdGenerator
(
IdGeneratorOptions
options
)
throws
IdGeneratorException
{
if
(
options
==
null
)
{
throw
new
IdGeneratorException
(
"options error."
);
}
if
(
options
.
BaseTime
<
315504000000L
||
options
.
BaseTime
>
System
.
currentTimeMillis
())
{
throw
new
IdGeneratorException
(
"BaseTime error."
);
}
if
(
options
.
WorkerIdBitLength
<=
0
)
{
throw
new
IdGeneratorException
(
"WorkerIdBitLength error.(range:[1, 21])"
);
}
if
(
options
.
SeqBitLength
+
options
.
WorkerIdBitLength
>
22
)
{
throw
new
IdGeneratorException
(
"error:WorkerIdBitLength + SeqBitLength <= 22"
);
}
double
maxWorkerIdNumber
=
Math
.
pow
(
2
,
options
.
WorkerIdBitLength
)
-
1
;
if
(
options
.
WorkerId
<
0
||
options
.
WorkerId
>
maxWorkerIdNumber
)
{
throw
new
IdGeneratorException
(
"WorkerId error. (range:[0, "
+
(
maxWorkerIdNumber
>
0
?
maxWorkerIdNumber
:
63
)
+
"]"
);
}
if
(
options
.
SeqBitLength
<
2
||
options
.
SeqBitLength
>
21
)
{
throw
new
IdGeneratorException
(
"SeqBitLength error. (range:[2, 21])"
);
}
double
maxSeqNumber
=
Math
.
pow
(
2
,
options
.
SeqBitLength
)
-
1
;
if
(
options
.
MaxSeqNumber
<
0
||
options
.
MaxSeqNumber
>
maxSeqNumber
)
{
throw
new
IdGeneratorException
(
"MaxSeqNumber error. (range:[1, "
+
maxSeqNumber
+
"]"
);
}
double
maxValue
=
maxSeqNumber
;
if
(
options
.
MinSeqNumber
<
1
||
options
.
MinSeqNumber
>
maxValue
)
{
throw
new
IdGeneratorException
(
"MinSeqNumber error. (range:[1, "
+
maxValue
+
"]"
);
}
switch
(
options
.
Method
)
{
case
1
:
_SnowWorker
=
new
SnowWorkerM1
(
options
);
break
;
case
2
:
_SnowWorker
=
new
SnowWorkerM2
(
options
);
break
;
default
:
_SnowWorker
=
new
SnowWorkerM1
(
options
);
break
;
}
if
(
options
.
Method
==
1
)
{
try
{
Thread
.
sleep
(
500
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
@Override
public
long
newLong
()
{
return
_SnowWorker
.
nextId
();
}
}
/*
* 版权属于:yitter(yitter@126.com)
* 开源地址:https://gitee.com/yitter/idgenerator
*/
package
com.yitter.idgen
;
import
com.yitter.contract.ISnowWorker
;
import
com.yitter.contract.IdGeneratorException
;
import
com.yitter.contract.IdGeneratorOptions
;
import
com.yitter.contract.IIdGenerator
;
import
com.yitter.core.SnowWorkerM1
;
import
com.yitter.core.SnowWorkerM2
;
public
class
DefaultIdGenerator
implements
IIdGenerator
{
private
static
ISnowWorker
_SnowWorker
=
null
;
public
DefaultIdGenerator
(
IdGeneratorOptions
options
)
throws
IdGeneratorException
{
if
(
options
==
null
)
{
throw
new
IdGeneratorException
(
"options error."
);
}
if
(
options
.
BaseTime
<
315504000000L
||
options
.
BaseTime
>
System
.
currentTimeMillis
())
{
throw
new
IdGeneratorException
(
"BaseTime error."
);
}
if
(
options
.
WorkerIdBitLength
<=
0
)
{
throw
new
IdGeneratorException
(
"WorkerIdBitLength error.(range:[1, 21])"
);
}
if
(
options
.
SeqBitLength
+
options
.
WorkerIdBitLength
>
22
)
{
throw
new
IdGeneratorException
(
"error:WorkerIdBitLength + SeqBitLength <= 22"
);
}
double
maxWorkerIdNumber
=
Math
.
pow
(
2
,
options
.
WorkerIdBitLength
)
-
1
;
if
(
options
.
WorkerId
<
0
||
options
.
WorkerId
>
maxWorkerIdNumber
)
{
throw
new
IdGeneratorException
(
"WorkerId error. (range:[0, "
+
(
maxWorkerIdNumber
>
0
?
maxWorkerIdNumber
:
63
)
+
"]"
);
}
if
(
options
.
SeqBitLength
<
2
||
options
.
SeqBitLength
>
21
)
{
throw
new
IdGeneratorException
(
"SeqBitLength error. (range:[2, 21])"
);
}
double
maxSeqNumber
=
Math
.
pow
(
2
,
options
.
SeqBitLength
)
-
1
;
if
(
options
.
MaxSeqNumber
<
0
||
options
.
MaxSeqNumber
>
maxSeqNumber
)
{
throw
new
IdGeneratorException
(
"MaxSeqNumber error. (range:[1, "
+
maxSeqNumber
+
"]"
);
}
double
maxValue
=
maxSeqNumber
;
if
(
options
.
MinSeqNumber
<
1
||
options
.
MinSeqNumber
>
maxValue
)
{
throw
new
IdGeneratorException
(
"MinSeqNumber error. (range:[1, "
+
maxValue
+
"]"
);
}
switch
(
options
.
Method
)
{
case
1
:
_SnowWorker
=
new
SnowWorkerM1
(
options
);
break
;
case
2
:
_SnowWorker
=
new
SnowWorkerM2
(
options
);
break
;
default
:
_SnowWorker
=
new
SnowWorkerM1
(
options
);
break
;
}
if
(
options
.
Method
==
1
)
{
try
{
Thread
.
sleep
(
500
);
}
catch
(
InterruptedException
e
)
{
e
.
printStackTrace
();
}
}
}
@Override
public
long
newLong
()
{
return
_SnowWorker
.
nextId
();
}
}
Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java
浏览文件 @
7aa0223c
/*
* 版权属于:yitter(yitter@126.com)
* 开源地址:https://gitee.com/yitter/idgenerator
*/
package
com.yitter.idgen
;
import
com.yitter.contract.IdGeneratorException
;
import
com.yitter.contract.IdGeneratorOptions
;
import
com.yitter.contract.IIdGenerator
;
/**
* 这是一个调用的例子,默认情况下,单机集成者可以直接使用 nextId()。
*/
public
class
YitIdHelper
{
private
static
IIdGenerator
idGenInstance
=
null
;
public
static
IIdGenerator
getIdGenInstance
()
{
return
idGenInstance
;
}
/**
*
设置参数,建议程序初始化时执行一次
* @param options
*/
public
static
void
setIdGenerator
(
IdGeneratorOptions
options
)
throws
IdGeneratorException
{
idGenInstance
=
new
DefaultIdGenerator
(
options
);
}
/**
* 生成新的Id
* 调用本方法前,请确保调用了 SetIdGenerator 方法做初始化。
*
@return
*
/
public
static
long
nextId
()
throws
IdGeneratorException
{
if
(
idGenInstance
==
null
)
{
idGenInstance
=
new
DefaultIdGenerator
(
new
IdGeneratorOptions
((
short
)
1
));
}
return
idGenInstance
.
newLong
();
}
}
/*
* 版权属于:yitter(yitter@126.com)
* 开源地址:https://gitee.com/yitter/idgenerator
*/
package
com.yitter.idgen
;
import
com.yitter.contract.IdGeneratorException
;
import
com.yitter.contract.IdGeneratorOptions
;
import
com.yitter.contract.IIdGenerator
;
/**
* 这是一个调用的例子,默认情况下,单机集成者可以直接使用 nextId()。
*/
public
class
YitIdHelper
{
private
static
IIdGenerator
idGenInstance
=
null
;
public
static
IIdGenerator
getIdGenInstance
()
{
return
idGenInstance
;
}
/**
* 设置参数,建议程序初始化时执行一次
*
* @param options
*/
public
static
void
setIdGenerator
(
IdGeneratorOptions
options
)
throws
IdGeneratorException
{
idGenInstance
=
new
DefaultIdGenerator
(
options
);
}
/**
* 生成新的Id
* 调用本方法前,请确保调用了 SetIdGenerator 方法做初始化。
*
*
@return
*/
public
static
long
nextId
()
throws
IdGeneratorException
{
if
(
idGenInstance
==
null
)
{
idGenInstance
=
new
DefaultIdGenerator
(
new
IdGeneratorOptions
((
short
)
1
));
}
return
idGenInstance
.
newLong
();
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录