@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() {
    // 业务逻辑
}

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

相关推荐
小席是个热心肠12 分钟前
AI相关的自我学习
java·人工智能·学习
xfhuangfu1 小时前
Oracle中建立到CDB和PDB的连接
数据库·oracle·rpc
小小龙学IT1 小时前
DuckDB 深度实战:用 C++ 在进程内跑一个「分析型数据库」
数据库·c++
NineData1 小时前
DTCC 2026 预告|NineData CEO& 创始人叶正盛:面向 AI Agent 的数据库 DevOps 与数据复制实践
数据库·人工智能·数据库开发·devops·ninedata·数据库技术·dtcc
J_bean2 小时前
MySQL 事务是否必须手动开启?
数据库·mysql·数据库事务·自动提交·手动提交
J_bean2 小时前
MySQL InnoDB 如何检测死锁、判定死锁、处理死锁
数据库·mysql·死锁·死锁检测·处理死锁·死锁判定
数智化管理手记3 小时前
海量数据如何沉淀有效数据资产?数据标准化治理方案如何搭建?
java·大数据·人工智能
浪子明X3 小时前
从 MongoDB 文档到关系模型:构建可重跑、可对账的数据迁移流水线
数据库·mongodb·oracle
杜子不疼.3 小时前
国产数据库撑起固井软件自主化:金仓 × 中海油服「海恒 Cemsol」落地解析
数据库
隔窗听雨眠3 小时前
GBase 8s并发控制深度解析:封锁机制、隔离级别与死锁处理全攻略
服务器·数据库·oracle