zoukankan      html  css  js  c++  java
  • 本地事务

    • 作用范围

    1. 作用接口上,不推荐,因为这只有在使用基于接口的代理时它才会生效
    2. 作用于类,该类的所有public方法都有相同的事物属性
    3. 作用于类方法上,只能用于public方法上,会覆盖类上注解配置
    • 属性

    1. propagation
        Propagation.REQUIRED(默认值) // 如果有事务,就加入该事务,如果没有,创建事务
        Propagation.SUPPORTS // 如果有事务,加入该事务,如果没有,不创建事务
        Propagation.MANDATORY // 如果有事务,加入该事务,如果没有,抛异常
        Propagation.REQUIRES_NEW // 不管当前有无事务,重新创建一个新的事务
        Propagation.NOT_SUPPORTED // 如果当前有事务,暂停当前事务,没有也不创建事务
        Propagation.NESTED // 等价于默认值
    2. isolation  // 事务的隔离级别,各个数据库厂商对其做了支持
        Isolation.DEFAULT // 使用数据库默认的隔离级别
        Isolation.READ_UNCOMMITTED // 读到未提交的数据
        Isolation.READ_COMMITTED // 读已提交的数据  mysql默认隔离级别
        Isolation.REPEATABLE_READ // 
        Isolation.SERIALIZABLE
    3. readOnly 默认值false
        对于不需要事务的方法设置readOnly为true可以提高性能
        例如:spring+hibernate的环境下,spring对只读事务会有特别的优化
    4. rollbackFor 指定回滚异常类型
        Spring默认抛出了未检查unchecked异常(继承自 RuntimeException 的异常)或者 Error才回滚事务;
        其他异常不会触发回滚事务。如果在事务中抛出其他类型的异常,但却期望 Spring 能够回滚事务,就需要指定 rollbackFor属性。
    5. noRollbackFor 指定不回滚的异常类型
    
    • 特性

    1. 原子性(Atomicity)
    2. 一致性(Consistency)
    3. 隔离性(Isolation)
    4. 持久性(Durability)
    
    • @transactional注解失效情况(即事务没有生效的原因)

    1. 事务注解只能作用在public的方法上,非public方法不生效
    2. propagation配置为非事务
    3. rollbackFor配置错误
    4. 外部调用没有声明事务的方法A,A调用本类的方法B,无论B是publilc还是private,或者是否声明事务,这次调用都不会有事务支持,因为事务是基于Spring的AOP代理的,只有当前事务方法被外部代码调用时才会得到事务的支持
    5. 代码里面吃了异常
    6. 数据库引擎不支持事务 mysql的innodb引擎默认支持事务
    7. 没有被事务所在的bean没有被spring管理
    
    • 参考

    [https://mp.weixin.qq.com/s/UnRvGBrMr-hP2Hd2eXqOqQ]: "Spring 事务失效的 8 大场景"

  • 相关阅读:
    BestCoder Round #14
    poj 3400 Dropping the stones
    ZOJ1610_Count the Colors(段树/为段更新)
    cxSpreadBook 要么 cxSpreadSheet 设置文本格式
    Chromium Graphics Update in 2014(滑动)
    tomcat加载时报The web application [/dmscs] created a ThreadLocal with key of type
    08-使用for循环输出杨辉三角(循环)
    PHP中遍历stdclass object 及 json 总结[中国航天神舟十号以json形式向地面返回数据]
    MIPI CSI-2规范一——概述及层级
    练习1.16
  • 原文地址:https://www.cnblogs.com/linqing001/p/14428285.html
Copyright © 2011-2022 走看看