# btg-idmanager **Repository Path**: value518/btg-idmanager ## Basic Information - **Project Name**: btg-idmanager - **Description**: 应用层id管理器。包括对jfinal的分布式管理支持(db、redis等基于jfinal插件)。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-05-02 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #btg-idmanager ``` 使用示例: 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.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接口; ```