zoukankan      html  css  js  c++  java
  • @Transcational特性

    • 捕获RuntimeException
    • 捕获Error
    • 并不捕获Checked Exception

    在方法中使用@Transcational注解时候,通过throw new Exception(),在发生异常的时候不会进行回滚,可以使用throw new RuntimeException();

    也可以使用@Transactional(rollbackForClassName="Exception")来设置回滚触发的异常类型。

    事物传播行为介绍: 

      @Transactional(propagation=Propagation.REQUIRED) :如果有事务, 那么加入事务, 没有的话新建一个(默认情况下)
      @Transactional(propagation=Propagation.NOT_SUPPORTED) :容器不为这个方法开启事务
      @Transactional(propagation=Propagation.REQUIRES_NEW) :不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
      @Transactional(propagation=Propagation.MANDATORY) :必须在一个已有的事务中执行,否则抛出异常
      @Transactional(propagation=Propagation.NEVER) :必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
      @Transactional(propagation=Propagation.SUPPORTS) :如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务.

    事物超时设置:

      @Transactional(timeout=30) //默认是30秒

    事务隔离级别:

      @Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据(会出现脏读, 不可重复读) 基本不使用
      @Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据(会出现不可重复读和幻读)
      @Transactional(isolation = Isolation.REPEATABLE_READ):可重复读(会出现幻读)
      @Transactional(isolation = Isolation.SERIALIZABLE):串行化

      MYSQL: 默认为REPEATABLE_READ级别
      SQLSERVER: 默认为READ_COMMITTED

    脏读 : 一个事务读取到另一事务未提交的更新数据
    不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 
    后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读"在同一事务中多次
    读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据
    幻读 : 一个事务读到另一个事务已提交的insert数据

  • 相关阅读:
    Restful接口传入多参数
    map转换成JSON的3种方式
    项目打包后执行start.sh提示“no such file or directory”解决办法,linux中给文件增加权限
    如何将一个a表a1字段与b表b1字段的笛卡尔积插入到e表中
    get、set方法的取代注释之lombok插件
    推荐 33 个 IDEA 最牛配置转(Java技术栈)
    mysql-----group by 对多个字段进行分组
    mysql获取某段时间内每一天的统计数据
    发票流水号生成方式
    postman之post请求传参
  • 原文地址:https://www.cnblogs.com/huangzhang/p/10732012.html
Copyright © 2011-2022 走看看