@Transactional事务失效问题

1、当方法非public修饰或者使用static修饰时,事务失效

@Transactional
public static void test() {
}

@Transactional
private void test() {
}

上述两种情况在编译时即可发现;

2、使用try catch,事务失效

@Transactional
public void test() {
	try {
		//sql
		int i = 1 / 0;
	} catch (Exception e) {
	}
}

由于事务需要异常触发,所以不能把异常直接吞掉

3、同一个类,A方法调用B方法,A无事务,B有事务,B中事务失效

public class Test {
	public void A() {
		B();
	}

	@Transactional
	public void B() {
	}
}

上述情况B中事务直接失效,只能在A方法上加事务注解

上一篇:Spring官方都推荐使用的@Transactional事务,为啥我不建议使用


下一篇:spring事务失效的几个场景