提交数据库后未收到响应/超时,@Transaction事务会回滚吗?
事务提交超时相关问题解答
场景一:数据库已完成提交,本地因网络延迟收到超时
- 事务不会被回滚。数据库已经执行完
commit指令,且事务变更对其他会话可见,说明事务已经在数据库端持久化完成。本地收到的超时只是网络传输层面的问题,数据库不会因为客户端没收到响应就回滚已经完成的事务。 - 此时本地程序会抛出超时异常,但数据库里的数据已经是提交后的状态,后续需要通过查询数据库来确认事务状态,避免因本地异常导致业务逻辑误判。
场景二:提交数据库后未收到响应(不确定数据库是否执行成功)
- 这属于事务状态未知的「悬而未决」场景,存在两种可能:
- 数据库根本没收到
commit请求:这种情况下,数据库会在连接超时或会话结束后自动回滚未提交的事务。 - 数据库已经执行了
commit但响应丢失:此时事务已经成功提交,数据变更已持久化。
- 数据库根本没收到
- 这种情况本地程序无法直接判断事务结果,必须通过额外机制处理,比如查询业务数据状态、设计幂等性接口,或者引入分布式事务中间件来避免数据不一致或重复执行的问题。
内容的提问来源于stack exchange,提问作者hololensen
相关产品推荐
相关产品推荐

