首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java spring中的并发性:@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.SERIALIZABLE)不工作

java spring中的并发性:@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.SERIALIZABLE)不工作
EN

Stack Overflow用户
提问于 2018-01-22 13:20:44
回答 1查看 287关注 0票数 1

我正在开发一个java (spring/hibernate)应用程序,它是一种定时和数量有限的销售平台.i.e,我只能在上午10am-11am的时间段销售1000张一种类型的卡我在大约3秒内收到了大约15万个请求,最终我卖出了1000多张卡,有时是1150张,有时是1300张。反过来,它又会导致销售超过指定限制的商品。

我认为我的程序不能处理并发,即使我在我的函数上指定了事务约束。如何限制并确保每个请求都从MySQL表中读取最新状态,并且不违反数量限制。

代码结构:

代码语言:javascript
复制
@Transactional (propagation = Propagation.REQUIRED, isolation = Isolation.SERIALIZABLE) FUNCTION() {  
    1.//check limit from DB();  
    2. //if limit is not breached, insert new item into the transaction table;  
    3. //Update user profile;   
}
EN

回答 1

Stack Overflow用户

发布于 2018-01-22 13:49:31

实现这一目标的方法有很多,但这完全取决于数据库检查和更新所需的时间以及运行应用程序的JVM数量。如果只有一个JVM,并且您的事务足够快,那么您始终可以同步顶级调用。其他方法是使用原子锁。

如果涉及多个JVM,您可以使用更高级的锁定机制,比如Hazelcast IMDG提供的机制。

我对MySql不太确定,但在Oracle中,您也可以很容易地在数据库级别锁定一个进程。如您所见,有很多选项:-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48375093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档