我是春天的初学者,现在在我的项目中我们有预订的方法,现在如果可用的预订是1,当两个用户同时尝试预订时,理想情况下只允许一个预订,但我的申请允许两个预订,现在我使方法同步,现在它工作正常,但同步概念现在属于JVM如果我在集群模式下配置我的应用程序在不同的机器中有不同的服务器(如此不同的JVMS),现在同步不起作用。 请问任何人可以告诉我限制预订的可能解决方案,告诉我JAVA方面以及DB方面的解决方案
答案 0 :(得分:3)
如果应用程序可能部署在集群中,那么同步方法确实是不够的
您应该依赖所有服务器实例共享的节点:DB。
您可以使用数据库锁定功能,尤其是乐观锁定和悲观锁定
使用它们,您可以避免因并发客户端对同一行的并发更新而导致的冲突。
选择哪个更符合您的用例。
Concurrency control in databases提取:
乐观 - 延迟检查交易是否符合 隔离和其他完整性规则(例如,可序列化和 可恢复性)直到结束,没有阻止其任何(阅读, 写)操作(" ...并对规则保持乐观 遇到..."),然后中止事务以防止违规,如果 提交时违反了所需的规则。一个流产 事务立即重新启动并重新执行,这会产生一个 显而易见的开销(而不是仅仅执行一次)。 如果没有 过多的交易被中止,然后乐观通常是一个 好策略。
悲观 - 阻止交易操作,如果 它可能会导致违反规则,直到可能性 违规消失。 通常涉及阻止操作 性能降低。
JDBC和JPA都支持。
答案 1 :(得分:0)
您应该尝试使用ETags - 乐观锁定机制。
可以使用Spring轻松实现。请查看官方文档。
希望这会有所帮助。