我已经做了类似下面的事情,将我的对象保存在spring transaction中的数据库中。
public void saveMyObject() {
TransactionTemplate template = new TransactionTemplate(transactionManager);
template.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);
template.execute(new TransactionCallbackWithoutResult() {
@Override
public void doInTransactionWithoutResult(TransactionStatus status) {
someService.update(myobject);
}
});
}
执行此操作时,我收到如下错误。
java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction
我的代码中可能存在什么问题?
答案 0 :(得分:2)
它通常称为死锁,这意味着另一个事务使用了你想要的元素,但是你有另一个元素需要另一个事务才能释放它正确的元素现在,所以两个交易都是相互阻止的。 这里有更好的解释:http://docs.oracle.com/javase/tutorial/essential/concurrency/deadlock.html