spring 并发访问 客户订单号设计

问题描述

我写的demo 用的是flex+hibernate+Spring 需求是新增一个订单,(订单号是唯一的日期加数字如"s201105001")比如在spring 中有一个保存订单数据的方法 public void saveOrders(List list)throws exception{ String ddh=cal(date);//这个方法是依据日期,查找订单表的订单号再生成日期 for(int i=0;i<list.size();i++){ Order o=list.get(i); o.setddh(ddh); save(o);//保存数据 }}问题是如果是并发访问的话,订单号就可能重复。求解? 问题补充:这是一个遗留的老系统,订单号不能加索引。日期是方法中的局部变量。我担心的是同时保存订单时,订单号有可能重复。

解决方案

首先你要确认是不是因为多人同时操作,时间相同,造成产生相同的ID号。如果是这样的话,那就是这个ID号的生成策略有问题了。建议在ID号上再加上人员ID,保证产生唯一的ID号。
解决方案二:
引用现在想到的方法是新建一个种子表(单独用来生产订单的),加乐观锁,处理异常来生产订单号不知道有没有什么好的方法恩,这个方法也是可以的。
解决方案三:
引用我的问题是两个人同时操作时比如都生成了订单号 201105001,那么一个人把订单数据保存后,另一个人就不应该使用这个订单号。上面的方法是service中的一个方法。这个东东在代码中是不好控制的,有个法子但也没法百分百解决问题,在DAO层执行插入前牺牲一个查询操作,先查一把,再执行插入。但是并不百分百靠谱的。我不知道SQL Server支不支持后续新增唯一键索引,因为那个是最靠谱的。呵呵。
解决方案四:
那你插入之前先检索以下,存在了就不插了
解决方案五:
多个人同时操作时日期就是同一个值
解决方案六:
如果是Oracle数据库的话 加唯一索引跟该表中是否有数据无关的 可能很轻松的加上 建议LZ咨询下你们的DBA如果在代码中加同步锁也不是不可,但是我感觉没必要。
解决方案七:
简单点的方法就是声明saveOrders方法为同步方法(+synchronized),不过会影响吞吐量。
解决方案八:
date是在哪里定义的???是类的成员变量么?如果是的话,这个类在spring里不能配成单例的。
解决方案九:
订单号是唯一的吧,在订单号上添加唯一索引如何?

时间: 2024-08-16 18:59:44

spring 并发访问 客户订单号设计的相关文章

订单号的设计

生成规则设计 http://hudeyong926.iteye.com/blog/1860360 订单号生成规则 系统时间随即号|系统时间数据库自增号 前阵子,公司有个电子商务项目,需要生成订单号.当时的考虑很简单,取系统时间加上随机数,或者使用 uniqid() 方法.我们都知道,订单号最基本的要求就是唯一,这个条件必须满足.仔细考虑下上述方法,在顾客购买量少的情况下,订单重复的可能性为零,但是在购买高蜂期生成的订单号重复是很有可能发生的 .所以上述方法不可靠,有待强化. Java代码   f

服务器 局域网 并发-关于局域网内部的并发访问

问题描述 关于局域网内部的并发访问 局域网内有60号人,自己用笔记本建立FTP服务器,CPU:i7 4710MQ,固态硬盘,千兆网卡,4G内存,当他们同时下载FTP上面的文件的时候,有一部分人的电脑上会显示连接超时,这种情况是需要加强CPU的性能吗? 解决方案 http://www.cnblogs.com/kaixin110/archive/2007/12/12/992400.html 解决方案二: 你的操作系统如果是windows 7/8等客户端系统,那么iis并发最大只有10,你可以安装se

Linux网络编程使用多进程实现服务器并发访问

  采用多进程的方式实现服务器的并发访问的经典范例. 程序实现功能: 1.客户端从标准输入读入一行文字,发送到服务器. 2.服务器接收到客户端发来的文字后,原样返回给客户端. 3.客户端接收到服务器的发来的文字后,输出到标准输出,然后继续以上步骤. 服务器端过程:建立好监听套接字后,等待客户端的连接,接收到一个连接后,创建一个子进程来与客户端进行通信,主进程则继续等待其他客户端的连接.代码如下: #include #include #include #include #include #incl

asp.net网站如何获取访问客户已经登陆了的QQ

问题描述 asp.net网站如何获取访问客户已经登陆了的QQ 解决方案 解决方案二:对于这种问题,只能路过下,打个酱油解决方案三:alert('你登录的QQ号是多少?');解决方案四:学习学习学习学习解决方案五:写com查进程应该可以的解决方案六:引用4楼hudsonhuang的回复: 写com查进程应该可以的 刚upgrade了一下,用c#写容易太多了http://www.alixixi.com/Dev/Web/ASPNET/aspnet1/2007/2007070765858.html

[原创]WCF后续之旅(12): 线程关联性(Thread Affinity)对WCF并发访问的影响

在本系列的上一篇文章中,我们重点讨论了线程关联性对service和callback的操作执行的影响:在service host的时候,可以设置当前线程的SynchronizationContext,那么在默认情况下,service操作的执行将在该SynchronizationContext下执行(也就将service操作包装成delegate传入SynchronizationContext的Send或者Post方法):同理,对于Duplex同行方式来讲,在client调用service之前,如果

php 使用redis锁限制并发访问类示例_php技巧

本文介绍了php 使用redis锁限制并发访问类,并详细的介绍了并发访问限制方法. 1.并发访问限制问题 对于一些需要限制同一个用户并发访问的场景,如果用户并发请求多次,而服务器处理没有加锁限制,用户则可以多次请求成功. 例如换领优惠券,如果用户同一时间并发提交换领码,在没有加锁限制的情况下,用户则可以使用同一个换领码同时兑换到多张优惠券. 伪代码如下: if A(可以换领)     B(执行换领)     C(更新为已换领) D(结束) 如果用户并发提交换领码,都能通过可以换领(A)的判断,因

深入浅出解析mssql在高频,高并发访问时键查找死锁问题

深入浅出解析mssql在高频,高并发访问时键查找死锁问题         SQL Server死锁使我们经常遇到的问题,数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁.希望对您学习SQL Server死锁方面能有所帮助.         死锁对于DBA或是数据库开发人员而言并不陌生,它的引发多种多样,一般而言,数据库应用的开发者在设计时都会有一定的考量进而尽量避免死锁的产生.但有时因为一些特殊应用场景如高频查询,高并发查询下由于数据库设计的潜在问题,一些不易捕捉的死

如何定义唯一订单号,解决用户重复交费问题?

问题描述 开发网上商城,用户购物时,可能登录在不同的两个pc上,产生一个相同订单号,交费成功,但记录的是两笔交易. 解决方案 解决方案二:引用楼主zhaijianguo8848的回复: 开发网上商城,用户购物时,可能登录在不同的两个pc上,产生一个相同订单号,交费成功,但记录的是两笔交易. 不明白这句话的意思.是说要达到这种效果,还是不要这种效果?不过产生唯一订单号,可以在订单号后面加时间戳,订单号+System.currentTimeMillis()解决方案三:取得訂單號與交費的時候,數據庫設

研究电子商务网站各访问来源订单及转化率

不同访问来源的网购用户,在电子商务网站的购物行为也是不一样的,所带来的订单量及转化率也存在差异.准确计量各访问来源所带来的订单量和转化率,可以为电子商务网站市场的推广策略提供相当重要信息;同样,清楚的了解竞争对手的市场推广手段和效率,也可以方便企业自身的策略调整.所以艾瑞咨询集团依托电子商务服务评估工具EcommercePlus(以下简称ECPlus),特针对电子商务网站各访问来源的订单量及转化率的问题,进行了专题的研究. 根据艾瑞咨询电子商务网站服务评估工具ECPlus的数据研究,我们可以知道