【发布时间】:2015-11-18 12:36:27
【问题描述】:
我是 spring/grails 交易的新手,阅读后我仍然不清楚,所以我在这里发布它,
我有一个注释为@Transactional 的服务类 我有一些方法,其中一些被注释为
@Transactional(propagation = Propagation.REQUIRES_NEW)
其中一些不是。
@Transactional
class SomeService {
def findJob() {
MyInstance myInstance = getMeAJob();
if (myInstance) {
doSomeThing(myInstance)
doTask()
}
}
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception)
private doSomeThing(MyInstance myInst) {
myObj = MyInstance.lock(myInst.id)
try {
differentObj = doTask(myObj)
myObj.save()
doAnotherThing()
}
} catch (Exception e) {
log("Error in doAnotherTask")
}
}
private doAnotherThing(MyInstace myInst) {
perform some update on myInst
myInstant.save(flush: true)
}
private doTask() {
}
- 假设,我有来自班级级别的事务 t1 和 t2 来自 doSomething() 的事务 - REQUIRES_NEW。
- 将在 t1 中执行的方法 - findJob() 和 doTask()
-
将在 t2 中执行的方法 - doSomeThing() - 不会影响 异常情况下的“t1”(回滚)
哪一个用于 doAnotherThing() 方法?既然我是从 doSomething() 调用它?
【问题讨论】:
标签: spring grails transactions spring-transactions