返回

Spring事务学习笔记(一) 初遇篇

后端

JDBC 中的事务管理

简介

事务是一种数据库操作,它将一系列相关操作分组在一起,确保要么所有操作都成功,要么所有操作都回滚。在 Java 中,可以通过 JDBC API 来管理事务。

JDBC 提供了以下接口来支持事务:

  • java.sql.Connection
  • java.sql.Savepoint
  • java.sql.Statement
  • java.sql.PreparedStatement
  • java.sql.CallableStatement

使用这些接口,可以实现基本的事务操作,如:

  1. 开启事务: 通过 Connection 对象的 setAutoCommit(false) 方法来开启事务。
  2. 执行事务: 通过 Statement 对象的 execute() 方法来执行事务。
  3. 提交事务: 通过 Connection 对象的 commit() 方法来提交事务。
  4. 回滚事务: 通过 Connection 对象的 rollback() 方法来回滚事务。
  5. 事务隔离级别: 可以通过 Connection 对象的 setTransactionIsolation() 方法来设置事务隔离级别。
  6. 事务传播特性: 可以通过 @Transactional 注解来设置事务传播特性。

代码示例:

Connection conn = ...;
try {
  conn.setAutoCommit(false); // 开启事务
  
  // 执行事务
  Statement stmt = conn.createStatement();
  stmt.executeUpdate("INSERT INTO users (name, age) VALUES ('John Doe', 30)");
  stmt.close();
  
  // 提交事务
  conn.commit();
} catch (SQLException e) {
  // 回滚事务
  conn.rollback();
} finally {
  conn.close();
}

Spring 中的事务管理

Spring 提供了更简单、更灵活的事务管理方式。它基于以下核心组件:

  • PlatformTransactionManager:事务管理器,用于创建和管理事务。
  • TransactionDefinition:事务定义,用于定义事务的属性,如隔离级别、传播特性等。
  • TransactionStatus:事务状态,用于表示事务的当前状态,如活动、挂起、已提交、已回滚等。
  • TransactionSynchronizationManager:事务同步管理器,用于管理事务上下文。
  • @Transactional 注解:用于在方法或类上声明事务。

在 Spring 中使用事务

在 Spring 中使用事务非常简单,只需要在需要进行事务管理的方法或类上添加 @Transactional 注解即可。

@Transactional
public void save(User user) {
  // ...
}

这样,Spring 就会自动帮我们管理事务。可以通过 @Transactional 注解的属性来指定事务的隔离级别、传播特性等。

Spring 事务的传播特性

Spring 事务的传播特性主要有以下几种:

  • REQUIRED:如果当前存在事务,则加入该事务;如果当前不存在事务,则创建一个新的事务。
  • REQUIRES_NEW:创建一个新的事务,并暂停当前事务(如果有的话)。
  • NESTED:创建一个嵌套事务。
  • SUPPORTS:如果当前存在事务,则加入该事务;如果当前不存在事务,则以非事务方式执行。
  • NOT_SUPPORTED:以非事务方式执行。
  • NEVER:如果当前存在事务,则抛出异常;如果当前不存在事务,则以非事务方式执行。

Spring 事务的隔离级别

Spring 事务的隔离级别主要有以下几种:

  • DEFAULT:使用数据库的默认隔离级别。
  • READ_UNCOMMITTED:读取未提交的数据。
  • READ_COMMITTED:读取已提交的数据。
  • REPEATABLE_READ:读取已提交的数据,并防止其他事务更新这些数据。
  • SERIALIZABLE:读取已提交的数据,并防止其他事务读取或更新这些数据。

Spring 事务的回滚机制

Spring 事务的回滚机制主要有以下几种:

  • RuntimeException:如果方法抛出 RuntimeException,则回滚事务。
  • CheckedException:如果方法抛出 CheckedException,则不回滚事务。
  • RollbackException:如果方法抛出 RollbackException,则回滚事务。

总结

Spring 事务为我们提供了简单、灵活的事务管理方式。通过使用 Spring 事务,我们可以保证数据的完整性和一致性。

常见问题解答

  1. 什么是事务?

    • 事务是一组相关操作,要么全部成功,要么全部回滚。
  2. 为什么需要事务?

    • 事务保证数据的完整性和一致性,防止出现数据不一致的情况。
  3. 如何使用 Spring 事务?

    • 在需要进行事务管理的方法或类上添加 @Transactional 注解即可。
  4. Spring 事务有哪些传播特性?

    • REQUIREDREQUIRES_NEWNESTEDSUPPORTSNOT_SUPPORTEDNEVER
  5. Spring 事务有哪些隔离级别?

    • DEFAULTREAD_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLE