Spring 事务不起作用的场景
在使用 Spring 框架进行项目开发的时候,往往会遇到事务不生效的问题,这里总结下常见的几种情况,避免以后入坑:
1.如果使用的是 Spring 代理模式的事务,只能用于 public 的方法上,否则事务不会生效。
2.如果在 Service 内部的 A 调用 B,如果 A、B 方法都没有添加事务注解,事务是不生效的。
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void update(Order order) {
updateOrder(order);
}
public void updateOrder(Order order) {
// update order
}
}
3.方法使用 try catch 但是在 catch 中没有抛出异常。
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
try {
// update order
} catch {
}
}
}
4.抛出的异常类型错误,如果不指定 rollbackFor 的异常类型,默认回滚 RuntimeException。
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
try {
// update order
} catch {
throw new Exception("error");
}
}
}