• 本地事务


    • 作用范围

    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 大场景"

  • 相关阅读:
    要检测两个C文件的代码的抄袭情况
    MFC简易画图
    hive中select 走与不走mapreduce
    JSP response request 中文乱码
    Hive内部自定义函数UDF
    eclipse编辑jsp没有代码提示
    Hive输出文件的间隔符
    Hadoop和HBase集群的JMX监控
    Hadoop配置项整理
    函数的递归,面向过程编程
  • 原文地址:https://www.cnblogs.com/linqing001/p/14428285.html
Copyright © 2020-2023  润新知