产生自定义格式的自动增长序列号:
/** * 自己维护的序列号,至少从1开始增长 */ public abstract class IncrementNumber { public IncrementNumber() {} public IncrementNumber(int interval, int maxNum) { this.interval = interval; this.maxNum = maxNum; } public synchronized int cal() throws Exception { if (serialNum == -1) { serialNum = initStartNum(); // 已经使用的序列号一定 小于 缓存的序列号 intervalMax = serialNum + interval; updateStartNum(intervalMax); return serialNum; } if (isMax(serialNum)) { // 达到预定的最大值 resetSerialNum(); return serialNum; } serialNum++; if (serialNum >= (intervalMax - 1)) { // 到达区间最大值 intervalMax += interval; updateStartNum(intervalMax); } return serialNum; } /** * 初始化序列号,从缓存系统中来,比如数据库、文件等 * @return 初始序列号 * @throws Exception */ public abstract int initStartNum() throws Exception; /** * 更新区间最大值到缓存系统,比如数据库、文件中。 * @param intervalMax 区间最大值 * @throws Exception */ public abstract void updateStartNum(int intervalMax) throws Exception; /** * 重置序列号,从1开始 */ protected void resetSerialNum() throws Exception { this.serialNum = 1; intervalMax = serialNum + interval; updateStartNum(intervalMax); } /** * 是否是最大值 * @param num * @return */ private boolean isMax(int num) { return num >= maxNum; } public int getInterval() { return this.interval; } public int getMaxNum() { return this.maxNum; } /** 区间最大值 */ protected int intervalMax = 0; /** 每次增加量 */ protected int interval = 20; /** 预定的最大值 */ protected int maxNum = 9999; /** 序列号 */ protected int serialNum = -1; }
使用方法:
@Service @Transactional public class TableKeyManager extends IncrementNumber { public TableKeyManager() { super(100, 99999999); } @Override public int initStartNum() throws Exception { TableKey tableKey = tableKeyDao.getById(name); date = DateConvertUtils.getDayEnd(DateConvertUtils.parse(tableKey.getDate(), "yyMMdd")); dateEndMillis = date.getTime(); prefix = tableKey.getDate(); return (int) tableKey.getMaxNum(); } @Override public void updateStartNum(int intervalMax) throws Exception { TableKey tableKey = tableKeyDao.getById(name); tableKey.setDate(DateConvertUtils.format(new Date(dateEndMillis), "yyMMdd")); tableKey.setMaxNum(intervalMax); tableKeyDao.update(tableKey); } public String getNum() { try { long now = System.currentTimeMillis(); int no = 0; if (now > dateEndMillis) { date = DateConvertUtils.getDayEnd(new Date(now)); dateEndMillis = date.getTime(); prefix = DateConvertUtils.format(date, "yyMMdd"); resetSerialNum(); no = this.serialNum; } else { no = cal(); } return prefix + ApplicationUtil.getFixedSizeNum(no, 8); } catch (Exception e) { e.printStackTrace(); } throw new RuntimeException("生成序列号错误"); } public void setName(String name) { this.name = name; } private String prefix = null; private long dateEndMillis = 0l; private Date date = null; private String name; @Autowired private TableKeyDao tableKeyDao; }
这种方法仅在初始化时查询一次数据库,在每次到达增长上限时,计数自动叠加一个步长,同时更新数据库中的数据上限。
table_key的数据结构
CREATE TABLE `table_key` ( `key_name` varchar(100) NOT NULL COMMENT '需要维护的key名称', `cur_no` mediumtext COMMENT '当前数据编号', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '数据编号更新时间', `create_time` datetime DEFAULT NULL COMMENT '记录创建时间', PRIMARY KEY (`key_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8
相关推荐
NULL 博文链接:https://wengmj.iteye.com/blog/401166
RMPP 自定义序列号定位打印软件支持多个打印模板项目,各项目可以定义多个打印项,包括自定义序列号与文本内容,可自定义打印数量,打印位置,打印内容格式,设置简洁明了。 RMPP自定义序列号定位打印功能: ...
用Java实现license的生成器,包括Java源码以及图形化界面
按流水号生成编码(脚本)
netty实现自定义协议通信,形如: /** * socketHeader定义 40 + 4+ 100 +4 * 序列号 40bytes 不足前面补0 * 来源 4bytes * 指令 8bytes 不足前面补0 形如0001, 0000:心跳 * 长度 4bytes */ 心跳连接 运行 ...
使用方法:在cmd环境下编译MyEclipseGen.java文件,运行MyEclipseGen.class即可,然后输入自己的定义的用户名,按确认键得到序列号。然后在myeclipse界面中,在导航栏上选择MyEclipse->subscription information....
MTK平台手机串号(IMEI)修改APP ####机型修改: 其实跟安卓系统有关的一些信息大多在/system/build.prop这个文件中,尤其是跟机型有关的信息。下面是ZTE U960S3这台手机调试输出的信息: 可以看到型号(model),商标...
这个是用mysql写的存储过程,搭配里面一张数据表使用,达到高并发情况下获得唯一订单号的目的;原理:按照一定规则生成订单号后,把订单号插入数据表后,再返回给用户,由于数据表设置了主键,也就是当数据表中存在...
EditPlus 是一款功能强大的文字处理软件。...程序内嵌网页浏览器,其它功能还包含 FTP 功能、HTML 编辑、URL 突显、自动完成、剪贴文本、行列选择、强大的搜索与替换、多重撤销/重做、拼写检查、自定义快捷键,等等...
用于计算MyEclipse8.5的序列号,支持自定义用户名。 使用方式,解压后打开CMD运行java MyEclipseKeyGen命令,输入用户名回车,就可以计算出序列号。
java系统源码 spring-boot-demo spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 16 个集成demo,已经完成 16 个。 该项目已成功集成batis-aop(AOP自定义多数据源)、multi-datasource-...
|--系统信息之获得手机sim卡序列号 |--缓存优化之几种方案lastModified |--缓存优化之本地缓存优化(超过规定值或SD卡容量不够时) |--网络post提交查询请求 |--网络之HttpClient的get和post用法 |--网络之判断网络...
①本停车场系统兼容市面上主流的多家相机,理论上兼容所有硬件,可灵活扩展,②相机识别后数据自动上传到云端并记录,校验相机唯一id和硬件序列号,防止非法数据录入,③用户手机查询停车记录详情可自主缴费(支持...
·用户可使用Java和基于JavaBeans的开放API,扩展设计自定义的动作、面板和控制台 ·在 XML或文本格式中安装日志 ·性能优化,提升安装时间两倍之多 ·XML的支持功能---包括了重新设计项目的文件格式,通过...
PDF-XChange Editor是...安装说明:已集成补丁,安装时选择自定义模式,选择你想安装的功能,选择 Free Version (免费模式)安装即可,免注册。 https://www.tracker-software.com/product/pdf-xchange-editor/history
自动获取手机类型、系统版本、系统API版本、系统CPU类型、序列号、IMEI、分辨率等信息,任务完成后将自动显示获取到的手机信息,使用该功能时请先连接手机设备。执行结果将在右下角冒泡提示。 13、手机截图 对...
自动:Ing。 何塞·米萨尔·伯鲁尔·扎苏埃塔 KWIC v2.1参数自定义建模模型v1.0 KWIC v1.0的任何形式的修改 增强型SRC安全性和完整性KWIC v2.1 Estos Directorios se nombran segun su proposito en el Sistema:...
� Google 提供了一套 Java 核心包 (J2SE 5,J2SE 6) 的有限子集,尚不承诺遵守 Java 任何 Java 规范 , 可能会造 成J ava 阵营的进一步分裂。 � 现有应用完善度不太够,需要的开发工作量较大。--------------------...
Eyrie-App ...如果当前手机已有 API 密钥,请不要创建新的 API 密钥(密钥名称基于 Android 序列号) ... #####在 GPL v3 许可下分发 使用代码和图标,大量修改以处理两个以上的点,并具有温度变化。
3. 运行该批处理程序将自动完成oracle卸载工作,最后手动删除\app文件夹(可能需要重启才能删除) 4. 运行regedit命令,打开注册表窗口。删除注册表中与Oracle相关的内容,具体如下: 删除HKEY_LOCAL_MACHINE/...