Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当交易启动时,票务应用程序如何保留席位,并将其释放回来以再次可用?_Java_Spring Boot_Transactions_Acid - Fatal编程技术网

Java 当交易启动时,票务应用程序如何保留席位,并将其释放回来以再次可用?

Java 当交易启动时,票务应用程序如何保留席位,并将其释放回来以再次可用?,java,spring-boot,transactions,acid,Java,Spring Boot,Transactions,Acid,假设一个用户选择了一个特定的座位,并选择了出去订票。在这种情况下,如何在规定的时间内保持座椅并将其释放。您可以保持座椅一段时间(比如15分钟)。假设您有用户A和用户B。 一旦有人预订了座位,您的应用程序就可以执行以下操作 设置A会话中的初始时间(A预订座位的时间)。对于分布式设置,您可以跳过此步骤 根据数据库中的座椅设置初始时间(比如座椅预定时间) 如果用户A在事务的生命周期内执行任何操作,则应用程序将执行以下操作: 从A的会话获取初始时间,并检查该时间是否已过期。对于分布式设置,仅从数据库获取

假设一个用户选择了一个特定的座位,并选择了出去订票。在这种情况下,如何在规定的时间内保持座椅并将其释放。

您可以保持座椅一段时间(比如15分钟)。假设您有用户A和用户B。
一旦有人预订了座位,您的应用程序就可以执行以下操作

  • 设置A会话中的初始时间(A预订座位的时间)。对于分布式设置,您可以跳过此步骤

  • 根据数据库中的座椅设置初始时间(比如座椅预定时间)

  • 如果用户A在事务的生命周期内执行任何操作,则应用程序将执行以下操作:

  • 从A的会话获取初始时间,并检查该时间是否已过期。对于分布式设置,仅从数据库获取初始时间
  • 如果用户B尝试预订座位,您的应用程序将执行以下操作:

  • 从数据库中获取所有这些座位 当前时间-座椅靠背时间>15分钟

  • 谢谢你的回答。我还研究了spring数据jpa的锁定机制来解决同样的问题。我是jpa新手,所以如果你对它有一些见解,我会非常感激。我认为jpa版本控制应该足够了。你真的不需要锁。因此,如果执行版本控制,我们可以定义15分钟的解锁时间吗?@Sathish你可以在应用程序中有一个可配置的变量,比如SetBookExpirationTime=15分钟。每当用户预订座位时,只需根据预订的座位和用户会话设置当前时间(我们称之为座椅预定时间)。要仅显示可用座位,可以使用以下检查:“从数据库中获取当前时间-SEATOOKINGTIME>SetBookExpirationTime的所有座位”。你真的不需要锁。谢谢。只是出于好奇,像fandango等现实世界的应用程序是否也以类似的方式工作?