首页 > 代码库 > 生成订单号
生成订单号
生成订单号,最大的问题是要考虑高并发的时候.在网上找的一些方案往往在这种情况下难以适用,比如,查询订单序列最大数,根据系统时间生成等.
再考虑另一种可行的方案:数据库递增序列,没错,确实能解决高并发的问题,但在集群等情况下对数据库压力比较大,而且有些数据库对递增序列没有很好的支持,同时递增序列的位数是一直增加的,也有可能会超出数据库表字段限制.
最好的方案是用java的uuid工具类生成唯一的字符串,然后再取这个字符串对象的hashcode值,因为字符串的值是唯一的,它的hashcode也是唯一的.
可参考如下代码:
/** 生成订单号,订单号的组成: 两位年+两位月+两位日+uuid哈希号(由于hashcode返回类型是int,最大为2147483648,不超过十位,所以此订单号不超过16位) * @return * @throws Exception **/ public String buildOrderSn() throws Exception { Date createDate = new Date(); SimpleDateFormat dateFormat = new SimpleDateFormat("yyMMdd"); StringBuilder out = new StringBuilder(dateFormat.format(createDate)); dateFormat = new SimpleDateFormat("yyyy-MM-dd"); int uuidNum = UUID.randomUUID().toString().hashCode(); out.append(uuidNum); return out.toString(); }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。