首页  

Spring事务失效的原因     所属分类 spring 浏览量 78
数据库引擎不支持事务
MySQL MyISAM 引擎不支持事务 ,InnoDB 才支持事务
MySQL 5.5.5 开始 默认存储引擎 InnoDB


没有被 Spring 管理
// @Service
public class OrderServiceImpl implements OrderService {   
  @Transactional    
  public void updateOrder(Order order) {       
    // update order;  
  }
}


方法非public
@Transactional 只能用于 public 方法上,否则事务不会失效


自身调用
内部方法调用,没有经过 Spring 的代理类,在外部调用事务才会生效

@Service
public class OrderServiceImpl implements OrderService {
    public void update(Order order) {
        updateOrder(order);
    }
    @Transactional
    public void updateOrder(Order order) {
        // update order;
    }
}

@Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void update(Order order) {
        updateOrder(order); 
    }
    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void updateOrder(Order order) {
        // update order;
    }
}


数据源没有配置事务管理器


非事务方式
Propagation.NOT_SUPPORTED
@Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void update(Order order) {
        updateOrder(order);
    }
    @Transactional(propagation = Propagation.NOT_SUPPORTED)
    public void updateOrder(Order order) {
        // update order;
    }
}

Propagation.NOT_SUPPORTED 表示不以事务运行,当前若存在事务则挂起


异常被吃掉,没有抛出
@Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    public void updateOrder(Order order) {
        try {
            // update order;
         }catch (Exception e){
            //do something;
        }
    }
}


异常类型不匹配或配置错误
@Service
public class OrderServiceImpl implements OrderService {
    @Transactional
    // @Transactional(rollbackFor = SQLException.class)
    public void updateOrder(Order order) {
        try {            // update order
          }catch (Exception e){
           throw new Exception("更新错误");        
        }    
    }
}
默认回滚 RuntimeException
@Transactional(rollbackFor = Exception.class)

上一篇     下一篇
python Simple HTTP Server

go程序设计语言01_03入门之查找重复的行

HikariCP为什么这么快

Lombok的一些坑

GO获取变量类型

go基本语法例子