博客
关于我
Spring事务传播属性和隔离级别
阅读量:316 次
发布时间:2019-03-03

本文共 1427 字,大约阅读时间需要 4 分钟。

Spring事务传播属性和隔离级别

Spring事务传播属性(Propagation)

在Spring中,事务传播属性决定了如何处理方法调用的事务关系。默认情况下,Spring使用REQUIRED属性,这表示如果存在一个已经激活的事务,当前方法会支持这个事务;如果没有事务,则会开启一个新的事务。这种传播方式确保了每个方法调用的逻辑事务域是独立的,前后方法之间不会互相影响。

传播属性的具体实现

  • REQUIRED(默认):如果有活性的事务存在,当前方法会参与这个事务;如果没有,则新建一个独立的事务。
  • MANDATORY:要求当前方法必须参与已有的事务。如果没有活性的事务,会抛出TransactionRequiredException
  • NEVER:禁止当前方法参与任何事务。如果有活性的事务,会抛出TransactionException
  • NOT_SUPPORTED:禁止当前方法参与事务。如果有活性的事务,会暂停当前事务并以非事务模式执行。
  • REQUIRES_NEW:强制创建新的事务。如果有活性的事务,会暂停当前事务并启动一个新的事务。
  • SUPPORTS:支持当前事务,如果没有活性事务,则以非事务模式执行。
  • NESTED:支持嵌套事务,与当前事务共享一个Savepoint,确保嵌套事务的提交与外层事务同步。
  • 传播属性的区别

    • REQUIRES_NEWNESTED:它们都要求新建事务,但REQUIRES_NEW创建的是独立的事务,外层事务无法回滚内层事务;而NESTED创建的是嵌套事务,外层事务的回滚会影响内层事务。

    传播属性的意义

    选择正确的事务传播属性对于应用程序的行为至关重要。例如,使用REQUIRES_NEW可以确保不同方法调用的事务相互独立,而NESTED则允许细粒度的控制,最大限度地利用已有的事务资源。


    Spring事务隔离级别(Isolation Level)

    事务的隔离级别决定了在并发环境下如何处理事务的读写冲突。不同的隔离级别提供了不同的并发控制机制,防止并发事务导致的数据不一致。

    并发问题

  • 脏读(Dirty Reads):一个事务读取未提交的数据,可能看到其他事务的修改。
  • 不可重复读(Non-Repeatable Reads):一个事务多次读取同一数据,结果受到其他事务修改的影响。
  • 幻像读(Phantom Reads):一个事务多次读取同一数据,结果受到其他事务插入的影响。
  • 隔离级别

  • DEFAULT(默认):使用数据库的默认隔离级别,通常为READ_COMMITTED
  • READ_UNCOMMITTED:最低隔离级别,允许读取未提交的事务数据,会导致脏读。
  • READ_COMMITTED:确保读取的数据是已提交的事务数据,避免脏读,但仍可能出现不可重复读。
  • REPEATABLE_READ:防止脏读和不可重复读,允许同一事务多次读取相同数据。
  • SERIALIZABLE:最高隔离级别,确保事务按顺序执行,防止任何形式的数据不一致。
  • 隔离级别的意义

    选择合适的隔离级别需要权衡数据一致性和性能。SERIALIZABLE虽然可靠,但会显著增加系统开销;而REPEATABLE_READ提供了较好的性能和数据一致性。


    通过合理配置事务传播属性和隔离级别,可以有效管理多个事务之间的关系,确保系统的数据一致性和高可用性。在实际应用中,需要根据业务需求选择最适合的隔离级别和传播属性,以实现高效且安全的事务管理。

    转载地址:http://sigl.baihongyu.com/

    你可能感兴趣的文章
    Nginx配置实例-动静分离实例:搭建静态资源服务器
    查看>>
    Nginx配置实例-反向代理实例:根据访问的路径跳转到不同端口的服务中
    查看>>
    Nginx配置实例-反向代理实现浏览器请求Nginx跳转到服务器某页面
    查看>>
    Nginx配置实例-负载均衡实例:平均访问多台服务器
    查看>>
    Nginx配置文件nginx.conf中文详解(总结)
    查看>>
    nginx配置文件nginx.conf超详细讲解
    查看>>
    Nginx配置文件详解
    查看>>
    Nginx配置自带的stub状态实现活动监控指标
    查看>>
    Nginx配置详解
    查看>>
    nginx配置详解
    查看>>
    nginx配置详解、端口重定向和504
    查看>>
    nginx配置负载均衡
    查看>>
    nginx配置负载均衡
    查看>>
    Nginx配置负载均衡到后台网关集群
    查看>>
    Nginx配置限流,技能拉满!
    查看>>
    Nginx配置静态代理/静态资源映射时root与alias的区别,带前缀映射用alias
    查看>>
    nginx配置静态文件服务器的一个特殊需求的探索和分享, nginx处理不同路径返回统一文件,nginx改写,跳转请求....
    查看>>
    Nginx限流熔断
    查看>>
    Nginx限流限速艺术揭秘:从原理到实战,轻松实现服务流量控制
    查看>>
    Nginx面试三连问:Nginx如何工作?负载均衡策略有哪些?如何限流?
    查看>>