Account.withTransaction { status ->
def source = Account.get(params.from)
def dest = Account.get(params.to)
int amount = params.amount.toInteger()
if (source.active) {
source.balance -= amount
if (dest.active) {
dest.amount += amount
}
else {
status.setRollbackOnly()
}
}
}
withTransaction
用途
允许使用 Spring 的 Transaction 抽象进行编程事务处理。
示例
命名的参数可选择作为参数传递以控制事务的属性。
// the keys in the Map must correspond to properties
// of org.springframework.transaction.support.DefaultTransactionDefinition
Account.withTransaction([propagationBehavior: TransactionDefinition.PROPAGATION_REQUIRES_NEW,
isolationLevel: TransactionDefinition.ISOLATION_REPEATABLE_READ]) {
// ...
}
说明
withTransaction
方法接受一个带有 TransactionStatus 参数的闭包。TransactionStatus
对象可用于对事务回滚进行编程控制。
有关更多信息,请参阅用户指南的 编程事务处理 部分。