java web项目 订单号问题

来源:百度知道 编辑:UC知道 时间:2024/06/19 20:37:13
要求多并发时候订单号不能重复,不能跳号,按照数据插入先后保持连续.
(java单例模式目前有困难,因为我用两个机器做服务器,每个机器都有一个单例存在,还是会重复订单号),求解决办法.

有啥困难么?数据库中的订单号为主键,设置为自增(恕我不知道是否有此功能),这样就可以了。
拿Hibernate操作Oracle数据库,对于订单的主键订单号使用sequence,然后在数据库中定义对应的sequence就可以了啊。。。。
其他的数据库我不清楚。或者调用存储过程,在存储过程中实现类似的功能即可。
思路就是这样的。因为数据库是唯一的,因此可以通过数据库本身的唯一性避免多服务的冲突

想到一个笨办法,你可以把订单号设为主键或者唯一约束,然后你在往数据库里存的时候必然会抛出异常,你用try捕获这个异常然后把订单号+1 再次循环往数据库存直到成功。这个办法虽然笨些,但也能解决问题。

相比用ejb来做,效率要低得多,但是成本却能省下不少,希望能帮到你。。。

PS:二台机器分别起一个线程,定期更新订单号的值,可以提高一些运行效率。

如果仅仅是多并发的情况下的话你只要确保你的主键生成器是线程安全的就可以,可以尝试加上synchronized尝试。

如果订单号重复了,再写一个类修改其中一个订单号为其他,如1_1这样的
这只是在无法解决重复订单号时的思路

我不建议你用楼上的说法... 数据库ID最好不要自动增长,自动增长对以后维护起来很麻烦的.......

实例id+时间戳