事务的基本特性

Spring Boot中的事务具有以下基本特性:

1. 原子性(Atomicity):事务被视为一个单个的逻辑操作单元,要么完全成功,要么完全失败。如果一个操作失败,事务将回滚到起始点,之前所有的操作都将被撤销。

2. 一致性(Consistency):事务在执行之前和之后都保持系统的一致性。事务的执行不会破坏数据库约束,例如主键、外键约束等。

3. 隔离性(Isolation):事务的隔离级别定义了事务之间的相互影响程度。Spring Boot支持四种隔离级别,分别是读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read)和串行化(Serializable)。隔离级别越高,事务的隔离度越高,但并发性能也会降低。

4. 持久性(Durability):事务一旦提交,将永久保存在数据库中,并且对系统故障具有恢复能力。即使在系统崩溃后,已提交的事务也将在系统恢复之后得到持久化。

事务的传播行为

事务的传播行为定义了多个事务方法相互调用时,事务如何在这些方法间传播。Spring Boot提供了七种事务的传播行为:

1. REQUIRED(默认):如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。

2. SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。

3. MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。

4. REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则将当前事务挂起。

5. NOT_SUPPORTED:以非事务的方式执行操作,如果当前存在事务,则将当前事务挂起。

6. NEVER:以非事务的方式执行操作,如果当前存在事务,则抛出异常。

7. NESTED:如果当前存在事务,则创建一个嵌套事务,如果当前没有事务,则与REQUIRED一样创建一个新的事务。

事务注解的使用

@Transactional
public void updateUser(String userId, String newName) {
    User user = userRepository.findById(userId);
    user.setName(newName);
    userRepository.update(user);
}

在Spring Boot中,使用@Transactional注解来声明需要事务支持的方法。当更新用户信息时,该方法会自动在数据库中开启一个事务。如果更新过程中出现异常,事务将回滚并撤销之前的所有操作。如果更新成功,事务将被提交并将数据持久化到数据库中。

除了@Transactional注解之外,还可以使用其他注解来对事务进行更详细的配置,例如@TransactionConfiguration、@TransactionManagement等。通过这些注解,可以设置事务的传播行为、隔离级别、超时时间等。