@Transactional(rollbackFor = Exception.class)
public void foo1() {
`/**Some Code**/`
}
@Transactional(propagation=Propagation.REQUIRED)
public void foo2() {
`/**Some Code**/`
}
@Transactional(rollbackFor = Exception.class)
public void foo1() {
`/**Some Code**/`
}
@Transactional(propagation=Propagation.REQUIRED)
public void foo2() {
`/**Some Code**/`
}
@Transactional(propagation=Propagation.REQUIRED)
和@Transactional(rollbackFor = Exception.class)
大致相同。因为propagation=Propagation.REQUIRED
是默认值。所以它们等价于@Transactional(propagation=Propagation.REQUIRED)
和@Transactional(propagation=Propagation.REQUIRED, rollbackFor = Exception.class)
。rollbackFor = Exception.class
时,它只会回滚RuntimeException
和Error
,而不是其他异常。(在使用EJB时,JEE的行为也已经被翻译到Spring中)。@Transactional
的javadoc中解释了。
rollbackFor
... - M. Deinumpropagation
和rollbackFor
关注的是不同的方面,propagation
关注事务需要或创建的方式,rollbackFor
关注指定异常发生时是否回滚已存在的事务。
请参考@Propagation docs以获取更多详细信息。
由于默认传播级别为Propagation.REQUIRED
,因此你提出的两个注解之间的主要区别在于是否对异常(已检查异常)进行回滚。