废话不多说先上错误demo
@LcnTransaction
@Transactional(rollbackFor = {Exception.class})
public boolean test() {
B_file b = new B_file();
b.setUrl("515645646");
b.setCategory("0");
// 发出sql
save(b);
try {
int i = 1 / 0;// 异常
return true;
} catch (Exception e) {
// 事务回滚
System.out.println("事务回滚");
// 其实这个模式下,下面这句会失效,导致数据库被正常插入
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();// 关键
return false;
}
}
可以运行类似代码,会发现这时候并没有事务回滚,上面的save对象会被插入到数据库.
解决方法有2种:
1.改用 @TccTransaction来替换lcn模式
2.使用DTXUserControls.rollbackCurrentGroup();来替换TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();