抛出检查异常时,Spring事务不会回滚

时间:2016-07-08 14:30:04

标签: spring exception transactions spring-transactions

我试图执行交易代码示例。我从事务方法抛出checked异常,并为此异常的类设置rollbackFor参数。但是,此事务不会回滚。所以我的问题是这种行为可能是什么原因。以下是我的代码示例:

为MyService:

@Service
@Transactional
@EnableTransactionManagement
public class MyService implements IMyService {

    @Autowired
    private IMyDao myDao;

    @Transactional(propagation = Propagation.REQUIRED, rollbackFor = BreakException.class)
    public void test() throws BreakException {
        myDao.updateMethodA("64", "'N'", "'2015.01.01/0008661/0008'");
        if(true) throw new BreakException();
        myDao.updateMethodB("15", "'N'", "'2015.01.01/0008661/0008'");
    }
}

MyDao:

@Repository
public class MyDao implements IMyDao {

    @Override
    @Transactional(propagation=Propagation.MANDATORY)
    public void updateOperationA(String x, String y, String z) {
        String sql = "UPDATE ...."; //masked for example
        jdbcTemplate.update(sql);
    }

    @Override
    @Transactional(propagation=Propagation.MANDATORY, rollbackFor = Exception.class)
    public void updateOperationB(String saldoPo, String saldo_status, String unikalne_id) throws BreakException {
        String sql = "UPDATE ...."; //masked for example
        //if(true) throw new BreakException();
        jdbcTemplate.update(sql);
    }
}

1。)因此,当我在MyService上调用test()时,抛出BreakException()后,方法updateMethodA的更新不会回滚。

2。)BreakException是我的类,它扩展了Exception

3.。)当我从updateOperationB抛出BreakException时(在示例中注释),它确实正确回滚。

4。)当我更改BreakException以扩展TransactionException时,它按预期工作,所以看起来问题只是在我扩展Exception时。

0 个答案:

没有答案