diff --git a/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java b/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java index a97e349..9fa0ffa 100644 --- a/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java +++ b/Java/source/src/main/java/com/yitter/idgen/DefaultIdGenerator.java @@ -1,79 +1,79 @@ -/* - * 版权属于: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(); + } +} diff --git a/Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java b/Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java index 31f58a5..35ada5d 100644 --- a/Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java +++ b/Java/source/src/main/java/com/yitter/idgen/YitIdHelper.java @@ -1,45 +1,45 @@ -/* - * 版权属于: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(); + } +}