最近在采访中,面试官问我一个问题,下面是问题 -
假设一个请求被发送到一个servlet并且servlet执行几个数据库事务(首先更新和提交,然后读取和更新并再次提交),这需要大约3-4分钟,在此期间用户按下取消按钮,连接丢失了。你将如何回滚整个交易。
我的回答是 - 由于Servlet抛出IOException,我们可以处理异常并回滚事务。
但他再一次质疑我已经完成的数据库提交怎么样,你会如何回滚呢。
我一片空白,回答说我从未遇到过这种情况。但我真的很想知道在这种情况下可以做些什么。
感谢。
答案 0 :(得分:0)
但他再一次质问我已经存在的DB提交是什么 完了,你会怎么回滚呢。
我认为这不是与servlet相关的问题。如果事务在数据库中提交,则无法回滚它。数据库事务具有多个称为ACID的属性(原子性,一致性,隔离性,持久性)。在这种情况下适用的是Durability:
“耐久性是保证交易的ACID财产 承诺将永久存在“