美文网首页
6.1.事物开启理解

6.1.事物开启理解

作者: 大也 | 来源:发表于2023-12-05 11:13 被阅读0次

编程式事务

Connection conn = ...;
  
try {
    // 开启事务:关闭事务的自动提交
    conn.setAutoCommit(false);
    // 核心操作
    // 业务代码
    // 提交事务
    conn.commit();
  
}catch(Exception e){
  
    // 回滚事务
    conn.rollBack();
  
}finally{
  
    // 释放数据库连接
    conn.close();
  
}

声明式事务
声明式事务是指使用注解或 XML 配置的方式来控制事务的提交和回滚。

  1. Spring声明式事务对应依赖
    • spring-tx: 包含声明式事务实现的基本规范(事务管理器规范接口和事务增强等等)
    • spring-jdbc: 包含DataSource方式事务管理器实现类DataSourceTransactionManager
    • spring-orm: 包含其他持久层框架的事务管理器实现类例如:Hibernate/Jpa等
image.png

DataSourceTransactionManager类中的主要方法:

  • doBegin():开启事务
  • doSuspend():挂起事务
  • doResume():恢复挂起的事务
  • doCommit():提交事务
  • doRollback():回滚事务
<!-- 声明式事务依赖-->
  <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>6.0.6</version>
  </dependency>
  1. 事务隔离级别

    数据库事务的隔离级别是指在多个事务并发执行时,数据库系统为了保证数据一致性所遵循的规定。常见的隔离级别包括:

    1. 读未提交(Read Uncommitted):事务可以读取未被提交的数据,容易产生脏读、不可重复读和幻读等问题。实现简单但不太安全,一般不用。
    2. 读已提交(Read Committed):事务只能读取已经提交的数据,可以避免脏读问题,但可能引发不可重复读和幻读。
    3. 可重复读(Repeatable Read):在一个事务中,相同的查询将返回相同的结果集,不管其他事务对数据做了什么修改。可以避免脏读和不可重复读,但仍有幻读的问题。
    4. 串行化(Serializable):最高的隔离级别,完全禁止了并发,只允许一个事务执行完毕之后才能执行另一个事务。可以避免以上所有问题,但效率较低,不适用于高并发场景。

    不同的隔离级别适用于不同的场景,需要根据实际业务需求进行选择和调整。

  2. Propagation.REQUIRED:如果当前存在事务,则加入当前事务,否则创建一个新事务。

  3. Propagation.REQUIRES_NEW:创建一个新事务,并在新事务中执行。如果当前存在事务,则挂起当前事务,即使新事务抛出异常,也不会影响当前事务。

  4. Propagation.NESTED:如果当前存在事务,则在该事务中嵌套一个新事务,如果没有事务,则与Propagation.REQUIRED一样。

  5. Propagation.SUPPORTS:如果当前存在事务,则加入该事务,否则以非事务方式执行。

  6. Propagation.NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,挂起该事务。

  7. Propagation.MANDATORY:必须在一个已有的事务中执行,否则抛出异常。

  8. Propagation.NEVER:必须在没有事务的情况下执行,否则抛出异常。

相关文章

  • 6.1.理解对象

    创建自定义对象 创建自定义对象的最简单方式就是创建一个 Object 的实例,然后再为它添加属性和方法。 上面的代...

  • vuex 理解

    6.1. vuex 理解 6.1.1. vuex 是什么 1)github 站点:https://github.c...

  • 理解事物

    我們可以用三個問題來幫助自己理解一項事物: 為什麼要有XXX?沒有XXX跟有XXX的區別是什麼?所以XXX是什麼?

  • 六、SassScript属性使用变量、算数运算

    6.1. Interactive ShellInteractive Shell 可以在命令行中测试 SassScr...

  • mysql事物

    1、一天sql语句就是一条事物默认开启默认提交2、可以显示的开启事务、回滚事物、提交事务2.1、开启事务 star...

  • 2019.5.10|哇,都在长大!

    这周我们开启了新的话题“哇,都在长大!”我们希望通过此话题带领小海豚们初步理解时间坐标中的人类与世界,探索事物的发...

  • 6 防御技术

    Contents: 6.1. 总体思路6.1.1. 访问控制6.1.2. 输入处理 6.2. 团队建设6.2.1....

  • HttpClient API 文档:6. HTTP 缓存

    6.1. 一般概念 HttpClient Cache 提供了用 HttpClient(等效浏览器缓存的 Java ...

  • Ansible部署系列:(六)安装MySQL

    6. 安装MySQL 6.1. 说明 安装在192.168.0.250这台机里,使用ansible进行安装和启动。...

  • 【原则】如何理解事物

    人在尝试理解任何东西(经济、市场、天气等)时,都可以从两种视角出发: 1.自上而下: 努力找到这些东西背后的唯一驱...

网友评论

      本文标题:6.1.事物开启理解

      本文链接:https://www.haomeiwen.com/subject/mdizwdtx.html