最近的一个项目中对数据库事务的处理要求比较严格。比如要完成业务A,需要完成操作1和操作2, 如果操作1失败,则业务A要整体回滚;如果操作2失败, 则仅需回滚操作2的数据,操作1的数据要留下来。因此整个业务算是两个事务。
发现的问题
以前并没有认真整理过代码的结构,这次要实现上述要求在事务标签的放置位置上遇到了一个奇怪的问题。业务我放在一个Manager中处理,操作可能放在Service层,或者有些也放在Manager中,结果如上的业务A,我的代码结构经历了如下几种调整:
位置1
如下代码进能保存op1()的数据,op2()数据无法保存。
public class Manager{
public void bus1(args) throws Exception {
op1();
op2();
}
@Transactional
public v