Spring 事务失效的场景
第一种:try { }catch (){}不抛出异常
try { }catch (){}不抛出异常 ,spring 事务不会捕捉到异常,导致事务失效。
@Transactional
public void insertTestCatchException() {
try {
int re = testMapper.insert(new Test(10));
if (re > 0) {
//运行期间抛异常
throw new Exception("need intercept");
}
testMapper.insert(new Test(210));
}catch (Exception e){
System.out.println("i catch exception");
}
}
第二种:类的(@TRANSACTION标记)方法为非public时
类的(@TRANSACTION标记)方法为非public时,方法是不会被spring 事务管理到的,导致事务失效。
@Transactional
private void insertTest() {
int re = testMapper.insert(new Test(10));
if (re > 0) {
throw new Exception("need intercept");
}
testMapper.insert(new Test(210));
}
第三种:在类的内部调用类内部(@Transactional标记)方法
在类的内部调用类内部(@Transactional标记)方法,方法是不会被spring 事务管理到的,导致事务失效。
@Transactional
public void insertTest() {
int re = testMapper.insert(new Test(10));
if (re > 0) {
throw new Exception("need intercept");
}
testMapper.insert(new Test(210));
}
public void test(){
//类内部调用@Transactional标注的方法。
insertTest();
}