Spring 控制器连接终止(即客户端超时)后的事务回滚

Spring 控制器连接终止(即客户端超时)后的事务回滚,spring,transactions,Spring,Transactions,描绘场景; 我有一个移动应用程序,它从Spring管理的服务器中提取20美元,并在应用程序上标记完成之前等待确认 但是, 移动应用程序向服务器发送撤销请求 控制器接收到请求并调用服务器层,说明服务层提取资金通常需要多长时间(原因不重要) 移动应用程序超时(带有SocketException),请求将重新排队,直到它可以再次与应用程序通话 服务器完成了来自1的请求,但不知道客户端已超时 我们现在的场景是,移动应用程序认为20美元失败了,但服务器执行了请求 所以问题就来了, •当套接字关闭时(即当移

描绘场景; 我有一个移动应用程序,它从Spring管理的服务器中提取20美元,并在应用程序上标记完成之前等待确认

但是,

  • 移动应用程序向服务器发送撤销请求

  • 控制器接收到请求并调用服务器层,说明服务层提取资金通常需要多长时间(原因不重要)

  • 移动应用程序超时(带有SocketException),请求将重新排队,直到它可以再次与应用程序通话

  • 服务器完成了来自1的请求,但不知道客户端已超时

  • 我们现在的场景是,移动应用程序认为20美元失败了,但服务器执行了请求

    所以问题就来了,

    •当套接字关闭时(即当移动应用程序超时请求时),Spring事务是否可以回滚

    •如果没有–实现上述目标的最佳方法是什么

    服务器上的一些信息 •弹簧3.1 •基于Spring的控制器/服务/DAO。 •Hibernate(JPA) •MYSQL数据存储

    谢谢

    伊恩

    当套接字关闭时(即当移动应用程序超时请求时),Spring事务是否可以回滚

    目前我无法想象这是怎么回事

    如果没有–实现上述目标的最佳方法是什么

    我会这样处理这个问题:

    • 移动应用程序发送某种令牌/uuid,用于标识取款
    • 如果请求超时,移动应用程序会在内部将退出标记为某种“未知结果”状态,而不是重新安排,移动应用程序可以使用令牌向服务器询问状态
    • “未知结果”应仅在一段时间内有效(例如5分钟),否则应假设退出无效并重新安排
    • 服务器上的事务也应该有一个超时(并且满足“未知结果”的时间)

    希望能有所帮助。

    我不知道Spring(所以这是一个评论,不是一个答案)-但是关于第二点,你可以使用2PC.@todda.speot.is-谢谢;一个选择是的,但不是我喜欢的方法,因为它需要大量的架构更改来适应。。