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数据

  • 相关阅读:
    itextpdf 和 pdfbox 测试用例
    Java base64 编码、解码
    常用字体
    DIY 单片机 入门
    太难了。
    Java 之 native:JNI 本地方法测试实现
    Java 之 String 引用传递
    Java class 文件 方法的指令含义
    Spring学习文章链接
    数据结构_树_图_总结
  • 原文地址:https://www.cnblogs.com/huangzhang/p/10732012.html
Copyright © 2011-2022 走看看