# btg-idmanager **Repository Path**: zcltd-btg/btg-idmanager ## Basic Information - **Project Name**: btg-idmanager - **Description**: id管理器 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-04-21 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # btg-idmanager #### 项目介绍 > id管理器 #### 使用示例 ``` 1、初始化 IdManager idManager = BtgIdManager.me(); //获取IdManager实例 IdGenerater idGenerater1 = idManager.createGenerater("id1"); //定义一个名字为id1的id生成器(第一个生成器为默认生成器) idGenerater1.addFormater(new ConstantFormater("MY_")); //添加一个常量格式化器 idGenerater1.addFormater(new TimestrampFormater(TimestrampFormater.FORMAT_PATTERN_DATETIME)); //添加一个时间格式化器 idGenerater1.addFormater(new MyFormater()); //添加一个自定义格式化器(假设根据产品大类和小类拼接作为标识符) idGenerater1.addFormater(new AutoIncrementFormater(10000, 1)); //添加一个自增长格式化器(种子为10000,步长为1) idGenerater1.addFormater(new SnowflakeFormater(0, 0)); //添加一个Snowflake分布式格式化器(机器ID为0,数据中心ID为0) idGenerater1.setAfterGeneraterReview(new AfterGeneraterReview() { //添加一个预生成后的处理逻辑 @Override public boolean intercept(List formaters, List formaterResults) { ConstantFormater constantFormater = (ConstantFormater) formaters.get(0); //去的第一个formater constantFormater.setConstant(constantFormater.getConstant().replace("_", "___")); //重新设置formater的属性 return false; //返回false将重新生成 } }); 2、调用API String id1 = BtgIdManager.me().next(arg0,arg1,...,argn); //不使用use则使用默认生成器 String id2 = BtgIdManager.me().use("id1").next(arg0,arg1,...,argn); 3、结果 String id1 = BtgIdManager.me().next("P1", "w001"); String id2 = BtgIdManager.me().use("id1").next("P2", "w002"); System.out.print(id1); System.out.print(id2); //MY___20170502145757P1w00110000 //MY___20170502150053P2w00210001 4、注意事项 1、除ConstantFormater外,其他已有Formater不能重用,会造成如last的不准确和next的不连续或未知问题; 2、IdManager.next()方法的Object... params参数主要用于自定义Formater的业务参数传递,IdGenerater只包含已有Formater实现时可不传递; 3、IdGenerater.setAfterGeneraterReview当返回false时,会重新调用formats生成id,若包含了自增formater等特殊formater时会造成则增不连续; 4、jfinal包下的DbFormater依赖jfinal的Db+record环境;RadisFormater依赖jfinal的redis插件; 5、扩展自己的Formater只需继承BasicFormater或实现Formater接口; ``` #### 升级记录 ``` v4.0.1 1、转为独立maven依赖,去掉parent; v3.0.3 1、btg-parent升级到v2.0.1; v3.0.2 1、统一依赖管理; v3.0.1 1、统一迁移至公司名下; v2.0.1 1、包名整理; v1.0.1 1、id管理插件; ``` --- 豆圆