IT袋

当前位置:主页 > 经验教程 > 建站编程 >

Spring事务详解

Spring事务详解 深入解析Spring的事务机制

时间:2024-01-26 20:01:04 来源:IT袋 作者:马勇
导读:Spring事务详解,关于Spring事务详解方面的内容,一起来看看吧! Spring 的事务一直是面试官经常询问的一个话题,但很多人只知道@ Transactional这个注解,但对Spring的事务体系,实现方式等

Spring事务详解

关于Spring事务详解方面的内容,一起来看看吧!

Spring 的事务一直是面试官经常询问的一个话题,但很多人只知道@ Transactional这个注解,但对Spring的事务体系,实现方式等方面却知之甚少,本文就将以图文结合的方式向读者介绍关于Spring事务。

什么是事务?

事务是逻辑上的一组操作,要么都执行,要么都不执行。

在 MySQL 数据库中只有 InnoDB 引擎才支持事务。

事务的 ACID 特性

原子性(Atomicity):事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用。

一致性(Consistency):执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的。

隔离性(Isolation):并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的。

持久性(Durability):一个事务被提交之后。它对数据库中数据的改变是持久的。

Spring 支持事务的两种方式

1)编程式事务:在代码中硬编码(不推荐使用) : 通过  TransactionTemplate 的 execute 或者 TransactionManager 的 commit 和 rollback 手动管理事务,实际应用中很少使用,但是对于你理解 Spring 事务管理原理有帮助。

2)声明式事务:在 XML 配置文件中配置或者直接基于注解(推荐使用) : 实际是通过 AOP 实现(基于@Transactional 的全注解方式使用最多)

事务属性介绍

事务属性包含了 5 个方面

  • 隔离级别
  • 传播行为
  • 回滚规则
  • 是否只读
  • 事务超时

隔离级别

隔离级别默认和数据库是一致的,一般不需要进行改动。

package org.springframework.transaction;
import org.springframework.lang.Nullable;
public interface TransactionDefinition {
    int PROPAGATION_REQUIRED = 0;
    int PROPAGATION_SUPPORTS = 1;
    int PROPAGATION_MANDATORY = 2;
    int PROPAGATION_REQUIRES_NEW = 3;
    int PROPAGATION_NOT_SUPPORTED = 4;
    int PROPAGATION_NEVER = 5;
    int PROPAGATION_NESTED = 6;
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
    int TIMEOUT_DEFAULT = -1;
    // 返回事务的传播行为,默认值为 REQUIRED。
    int getPropagationBehavior();
    //返回事务的隔离级别,默认值是 DEFAULT
    int getIsolationLevel();
    // 返回事务的超时时间,默认值为-1。如果超过该时间限制但事务还没有完成,则自动回滚事务。
    int getTimeout();
    // 返回是否为只读事务,默认值为 false
    boolean isReadOnly();
    @Nullable
    String getName();
}

相关阅读

  • 网络错误代码101是什么意思 打开网站错误代码101解决办法

    网络错误代码101是什么意思 打开网站错误代码101解决办法

    文章摘要:网络错误代码101是什么意思和打开网站错误代码101解决办法的相关知识,下面IT袋为您详细介绍 steam是一款受众非常广的游戏平台,最近上新的好游十分的多。但是最近有许多的玩家

  • web服务器怎么配置 免费个人web服务器推荐

    web服务器怎么配置 免费个人web服务器推荐

    对于许多网友来说web服务器怎么配置和免费个人web服务器推荐方面的内容,具体详情如下: 回想一下一个http请求的过程,你在浏览器输入xxx.com,经过域名解析 发起tcp的3次握手 建立tcp连接后

  • 用户输入网址到看到内容之间的过程

    用户输入网址到看到内容之间的过程

    对于许多网友来说用户输入网址到看到内容之间的过程的内容,相关内容具体如下: DNS解析: 浏览器首先会检查网址中的域名部分(例如,www.xxxxx.com)。 浏览器会向本地DNS缓存查询,如果之

  • Python列表基础详解 深入解析Python列表的基础知识

    Python列表基础详解 深入解析Python列表的基础知识

    今天带来的IT技巧小经验Python列表基础详解的话题,一定能解决您的问题的,一起来了解吧! 在Python中,列表是一种有序的、可变的数据结构,用于存储多个值。 列表可以包含各种类型的元素