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

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

相关推荐
覆东流1 小时前
7.Java数组
java·开发语言·后端
m0_719084111 小时前
限流和获取请求ip的方法
java
程序员小八7772 小时前
MySQL 事务:一文把 ACID、隔离级别、MVCC、锁全串起来
数据库·mysql
lzhdim2 小时前
提高 SQL 语句执行速度的方法
java·开发语言·数据库·sql·oracle
ltl2 小时前
ClickHouse Distributed 引擎与分布式查询路由
数据库
Wang's Blog2 小时前
PostgreSQL笔记60: 权限与角色管理——从层级体系到最佳实践
数据库·笔记·postgresql
深漂的华哥3 小时前
Ruoyi-Plus前后端分离场景下,数据加密传输
java·spring boot·后端·开源·maven·ruoyi
whcyhhh3 小时前
头歌实践教学平台:大数据存储2023(六)
大数据·数据库·python
落魄大学生之流水线上谋生计4 小时前
Java锁全面指南:从基础概念到企业级应用
java·开发语言
Elastic 中国社区官方博客4 小时前
让大模型思考,让小模型执行:在 Elastic Workflows 中拆分 LLM 成本
大数据·运维·数据库·人工智能·elasticsearch·ai