1. 首页
  2. 软件开发
  3. Spring——什么是基于@Transactional注解的声明式事务?

Spring——什么是基于@Transactional注解的声明式事务?

  • 发布于 2024-08-17
  • 0 次阅读

Spring基于注解的声明式事务允许通过在方法上添加注解来管理事务,而无需编写繁琐的事务管理代码。通过在方法上添加注解,可以指定事务的传播行为、隔离级别、超时时间、只读属性等。

1. 传播行为(Propagation)

控制事务方法如何与现有事务进行交互。

  • REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新事务。
  • REQUIRES_NEW :始终通过创建一个新的事务来执行该方法;如果当前存在事务,则将其挂起。
  • 其他传播行为包括 SUPPORTS 、 MANDATORY 、 NESTED 等。

2. 隔离级别(Isolation)

定义事务的隔离级别,控制事务之间的相互影响。

  • READ_UNCOMMITTED :允许事务读取未提交的数据修改。
  • READ_COMMITTED :确保事务只能读取已提交的数据。
  • 其他隔离级别包括 REPEATABLE_READ 、 SERIALIZABLE 等。

3. 超时时间(Timeout)

设置事务的超时时间,单位为秒,默认为-1(永不超时)。

4. 只读属性(ReadOnly)

指示事务是否为只读事务,如果为true,则不允许进行写操作。

代码如下:

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {
   

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30, readOnly = false)
    public void updateUserEmail(Long userId, String newEmail) {
   
        // 更新用户邮箱操作
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW, isolation = Isolation.READ_COMMITTED)
    public void createUser(String name, String email) {
   
        // 创建用户操作
    }

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, timeout = 30, readOnly = true)
    public User getUserById(Long userId) {
   
        // 查询用户操作
    }

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT)
    public void deleteUser(Long userId) {
   
        // 删除用户操作
    }
}

@Transactional 注解被用于标记事务方法,并设置了不同的事务属性。这样,Spring会根据注解配置来管理事务的行为。

原文链接: https://blog.csdn.net/2401_82884096/article/details/137856879