gpt4 book ai didi

java - java spring : @Transactional(propagation = Propagation. 中的并发需要,隔离 = Isolation.SERIALIZABLE) 不工作

转载 作者:行者123 更新时间:2023-11-30 21:48:30 27 4
gpt4 key购买 nike

我正在开发一个 java (spring/hibernate) 应用程序,它是一种限时且数量有限的销售平台。也就是说,我必须在上午 10 点到 11 点的时间段内只销售 1000 张某种类型的卡片。我在大约 3 秒内收到了大约 150 000 个请求,最终我卖出了 1000 多张卡片,有时是 1150 张,有时是 1300 张。这反过来导致销售的商品超过指定的限制。

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

代码结构:

@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;
}

最佳答案

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

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

我不确定 MySql,但在 Oracle 中,您也可以轻松地在数据库级别锁定进程。如您所见,有很多选择:-)

关于java - java spring : @Transactional(propagation = Propagation. 中的并发需要,隔离 = Isolation.SERIALIZABLE) 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48375093/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com