Mongodb在异常时还原保存的事务
我的grails应用程序中有一个starnge场景,每当不同的用户同时下订单并且更新同一个菜单时,它会抛出一个乐观锁定异常,现在是这样的Mongodb在异常时还原保存的事务,mongodb,grails,transactions,Mongodb,Grails,Transactions,我的grails应用程序中有一个starnge场景,每当不同的用户同时下订单并且更新同一个菜单时,它会抛出一个乐观锁定异常,现在是这样的 def orderApi { // credits are deducted before try catch // code // ..... try { // code to place order } catch(Exception e){ // send mai
def orderApi {
// credits are deducted before try catch
// code
// .....
try {
// code to place order
}
catch(Exception e){
// send mail for exception
orderFailed = true
}
if(orderFailed){
refundUserCredits(order)
}
}
def refunduserCredits(Order order){
User user = order.user
user.credits = order.credits
if(!user.save()){
println "Unable to save user" // but it does not save the credits
}
}
我想,既然我捕获了异常,并退还了积分并保存了用户对象,那么应该保存它们。同样奇怪的是,如果它不保存用户信用,它应该进来!user.save()并打印消息,但它甚至没有这样做。帮助 我想你会从使用。它将允许您将下单和信用扣减捆绑在一起,作为一个全有或全无单元。现在,您正在实现自己的事务管理。事情会是这样的
Order.withTransaction { status ->
// deduce credits and attempt to place order. save() all you want.
if(orderFailed) status.setRollbackOnly()
}
因此,只有在一切顺利的情况下,订单和用户更改才会被保留。是否有可能引发另一个异常?没有,正如我从日志中检查的那样,没有其他异常。出于某种原因,您可以说,已经实现的代码复杂度和大量修改,我无法尝试这样做,一旦抛出异常,我必须找到一个解决方案来保存用户信用。