在这里就不接受spring 事务的ACID特性、事务的传播行为等等,相信看到这篇的大佬们应该也对事务有所了解了不过多阐述。
直接分析事务不生效的原因。
开喽!
情况(一):
/**
* @Description //lf 事务不生效 情况 (一)
**/
@Override
public boolean ta(Config config) {
//lf 当没有 @Transactional 注解的方法(ta)调用添加 @Transactional 注解的方法(tb)
// 这时调用完成后 ta 抛出异常,
// @Transactional原理是基于spring aop,aop又是动态代理模式的实现 内部调用,没有走代理,
// 用的是this
tb(config);
int a=1/0;
return true;
}
@Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRED)
public Boolean tb(Config config){
save(config);
return true;
}
情况(二):
@Transactional(propagation = Propagation.REQUIRED)
public Boolean tb(Config config){
// lf 非RuntimeException 错误,都不会回滚。
// 所以这情况需要在 注解里添加rollback = Exception.css, 所有异常都进行回滚
save(config);
return true;
}
情况(三):
这三种情况都不会生效,当然现在idea很只能了,添加这些是不能和@Transactional 注解同时存在的
所有还有事务注解的方法 一定是public 标识,
- private 方法无法添加事务管理.
- final 方法无法添加事务管理.
- static 方法无法添加事务管理.
情况(四):
/**
* @Description //lf 事务不生效 情况(四)
*/
@Transactional(propagation = Propagation.REQUIRED)
public boolean ta1(Config config) {
// lf 添加了try{}catch 也不会进行回滚 需要把异常抛出或 设置事务回滚
try {
tb1(config);
int a=1/0;
} catch (Exception e) {
// lf 设置事务回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
}
return true;
}
待续。。。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)