@Transactional 参数详解

@Transactional 注解在 Spring 框架中用于声明一个方法或类应该在事务中执行。事务是一种确保数据库操作要么全部成功,要么全部失败的机制,确保数据的一致性和完整性。以下是 @Transactional 注解的参数详解:

  1. propagation: 事务传播行为,指定事务的传播方式。常见的传播行为有:

    • REQUIRED(默认值):如果当前存在事务,则加入该事务;如果当前没有事务,则新建一个事务。
    • REQUIRES_NEW:每个事务都会开启一个新事务,不管当前是否存在事务。
    • SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
    • NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起它。
    • MANDATORY:要求当前存在事务;如果当前没有事务,则抛出异常。
    • NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
    • NESTED:如果当前存在事务,则嵌套在当前事务中执行;如果当前没有事务,则新建一个事务。
  2. isolation: 事务隔离级别,指定事务的隔离级别。常见的隔离级别有:

    • DEFAULT:使用数据库的默认隔离级别。
    • READ_UNCOMMITTED:允许读取未提交的数据,可能会出现脏读。
    • READ_COMMITTED:只允许读取已提交的数据,可以防止脏读。
    • REPEATABLE_READ:在事务期间,多次读取同一数据的结果是相同的,可以防止不可重复读。
    • SERIALIZABLE:最高隔离级别,完全隔离的事务,防止脏读、不可重复读和幻读。
  3. timeout: 事务超时时间,指定事务的超时时间(以秒为单位)。如果事务在指定的时间内没有完成,则会被强制回滚。

  4. readOnly : 事务是否是只读的。设置为 true 可以优化性能,因为 Spring 可以利用只读事务来进行一些优化,防止对数据库进行写操作。

  5. rollbackFor: 指定哪些异常类型会导致事务回滚。如果抛出了这些异常类型中的任何一个,则事务会被回滚。

  6. noRollbackFor : 指定哪些异常类型不会导致事务回滚。如果抛出了这些异常类型中的任何一个,则事务不会回滚,即使 rollbackFor 参数中指定的异常类型被抛出。

  7. rollbackForClassName : 通过异常的类名指定哪些异常会导致事务回滚。这是 rollbackFor 参数的类名字符串版本。

  8. noRollbackForClassName : 通过异常的类名指定哪些异常不会导致事务回滚。这是 noRollbackFor 参数的类名字符串版本。

java 复制代码
@Transactional(
    propagation = Propagation.REQUIRED,
    isolation = Isolation.READ_COMMITTED,
    timeout = 30,
    readOnly = false,
    rollbackFor = {SQLException.class},
    noRollbackFor = {CustomException.class}
)
public void someTransactionalMethod() {
    // 业务逻辑
}

这些参数可以根据实际需要进行配置,以达到对事务的精确控制。

相关推荐
子非鱼@Itfuture10 分钟前
`<T> T execute(...)` 泛型方法 VS `TaskExecutor<T>` 泛型接口对比分析
java·开发语言
2601_9498161611 分钟前
spring.profiles.active和spring.profiles.include的使用及区别说明
java·后端·spring
Nontee13 分钟前
Redis高可用架构解析
数据库·redis·架构
淼淼爱喝水20 分钟前
DVWA SQL 注入(Medium/High 级别)过滤绕过与防范实验(超详细图文版)
数据库·sql·网络安全
csdn_aspnet21 分钟前
MySQL主从延迟根因诊断法,从网络、IO、SQL到参数,系统化定位高并发下的同步瓶颈
数据库·mysql·主从
疯狂成瘾者22 分钟前
接口规范设计:返回体 + 错误码 + 异常处理
java·状态模式
阿Y加油吧24 分钟前
LeetCode 二叉搜索树双神题通关!有序数组转平衡 BST + 验证 BST,小白递归一把梭
java·算法·leetcode
项目帮28 分钟前
Java毕设选题推荐:基于springboot区块链的电子病历数据共享平台设计与实现【附源码、mysql、文档、调试+代码讲解+全bao等】
java·spring boot·课程设计
心有—林夕1 小时前
两个事务间的传播机制
java·事务
疯狂成瘾者1 小时前
什么是多 Agent,多Agent是如何协作的?
java