首页 > 其他分享 >@Transactional:声明式事务管理,保证数据一致性

@Transactional:声明式事务管理,保证数据一致性

时间:2023-10-24 14:56:05浏览次数:27  
标签:事务管理 回滚 Transactional rollbackFor 事务 注解 保证数据 class

一、介绍

通过使用@Transactional注解,我们可以更加方便地管理事务,保障数据的一致性和可靠性。

在实际项目中,合理使用@Transactional注解可以提高「开发效率 」和代码「可维护性 」。

二、用法

@Transactional(rollbackFor = Exception.class)
public ResponseDTO<String> update(NoticeUpdateDTO updateDTO) {
NoticeEntity entity = noticeDao.selectById(updateDTO.getId());
if (entity == null) {
return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "此系统通知不存在");
}
if (JudgeEnum.YES.getValue().equals(entity.getSendStatus())) {
return ResponseDTO.wrap(ResponseCodeConst.ERROR_PARAM, "此系统通知已发送无法修改");
}
noticeManage.update(entity, updateDTO);
return ResponseDTO.succ();
}

 三、总结

@Transactional 是 Spring 框架中用于管理事务的注解,它可以被应用到类或方法上。使用 @Transactional 注解可以使方法具有事务性质,即当该方法执行时,如果发生异常或错误,会自动回滚到之前的状态。

在 Spring 中,事务管理是通过 AOP(面向切面编程)实现的。当一个带有 @Transactional 注解的方法被调用时,Spring 会自动创建一个事务,并在方法执行结束后提交或回滚该事务,具体根据方法执行结果来决定。

@Transactional 注解有以下常用属性:

  • propagation:设置事务的传播行为,即当前方法执行时,是否需要创建新的事务。常用的取值有 REQUIRED、SUPPORTS、MANDATORY 等。
  • isolation:设置事务的隔离级别,即当前事务与其他事务之间的关系。常用的取值有 READ_UNCOMMITTED、READ_COMMITTED、REPEATABLE_READ、SERIALIZABLE 等。
  • timeout:设置事务的超时时间,即事务执行的最长时间。默认值为 -1,表示没有超时限制。
  • readOnly:设置事务是否为只读事务,即该事务是否允许修改数据库。默认值为 false,表示该事务可读可写。

下面是一个使用 @Transactional 注解的例子:

javaCopy Code
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDao userDao;

    @Override
    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
    public void updateUser(User user) {
        userDao.updateUser(user);
    }
}

在上面的例子中,updateUser 方法被标注为 @Transactional 注解,表示该方法需要执行事务。propagation 属性设置为 REQUIRED,表示如果当前存在事务,则加入该事务,否则新建一个事务。isolation 属性设置为 READ_COMMITTED,表示该事务采用读已提交的隔离级别。

总之,@Transactional 注解是 Spring 中非常重要的事务管理工具,可以帮助开发者更方便地管理事务。

四、常用写法

@Transactional(rollbackFor = Exception.class)

是 @Transactional 注解的一个属性设置。它指定了在哪些异常情况下需要回滚事务。

当一个方法被标注了 @Transactional 注解时,如果在方法执行过程中发生了被 rollbackFor 属性指定的异常或其子类异常,事务将被回滚,即之前的操作都会被撤销。

在上述代码中,rollbackFor 属性被设置为 Exception.class,表示任何 Exception 及其子类异常都会触发事务回滚。也就是说,无论在方法中抛出了哪种异常,都会导致事务回滚。

通常情况下,建议将 rollbackFor 属性设置为具体的异常类型,以便更精确地控制事务的回滚。例如,可以将其设置为某个自定义异常类,或者设置为多个异常类,如 rollbackFor = {SQLException.class, IOException.class}。

如果没有显式设置 rollbackFor 属性,事务默认会在遇到 RuntimeException 或 Error 时回滚,而对于 checked exception(非 RuntimeException 的异常),默认是不会回滚事务的。

总结起来,@Transactional(rollbackFor = Exception.class) 表示在方法执行过程中,遇到任何 Exception 及其子类异常时,都会触发事务的回滚操作。

标签:事务管理,回滚,Transactional,rollbackFor,事务,注解,保证数据,class
From: https://www.cnblogs.com/wlwtop/p/17784775.html

相关文章

  • Spring源码解析——@Transactional注解的声明式事物介绍
    正文面的几个章节已经分析了spring基于@AspectJ的源码,那么接下来我们分析一下Aop的另一个重要功能,事物管理。最全面的Java面试网站事务的介绍1.数据库事物特性原子性多个数据库操作是不可分割的,只有所有的操作都执行成功,事物才能被提交;只要有一个操作执行失败,那么所有的操作......
  • seata事务管理
    seata事务管理中三个重要角色:TC事务协调者,维护全局和分支事务的状态,协调全局事务的提交与回滚TM事务管理者,定义全局事务的范围,全局事务的开始,事务的提交与回滚RM资源管理者,管理分支事务处理的资源,和TC交谈以注册分支事务,报告分支事务状态,并驱动事务的提交和回滚......
  • Spring事务管理
    Spring事务管理1Spring事务简介【重点】1.1Spring事务作用事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败1.2案例分析Spring事务需求:实现任意两个账户间转账操作需求微缩:A账户减钱,B账户加钱分析:①:数据......
  • Spring事务管理
    Spring事务管理1Spring事务简介【重点】1.1Spring事务作用事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败1.2案例分析Spring事务需求:实现任意两个账户间转账操作需求微缩:A账户减钱,B账户加钱分析:①:数据......
  • java中如何保证数据库数据的一致性
    本文使用的数据库是mysql一、不考虑并发时的写法假设现在有一张t_product表,我们先只考虑单实例部署时的情况CREATETABLEt_product(idINTPRIMARYKEY,NAMEVARCHAR(50),numsINT);INSERTINTOt_product(id,NAME,nums)VALUES(1,'aa',1);我们现在有一个加库存的接口......
  • 支付宝一面:多线程事务怎么回滚?说用 @Transactional 可以回去等通知了!
    背景介绍1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。2,在spring中可以使用@Transactional注解去控制事务,使出现异常时会进行......
  • spring中配置事务管理器
    2023-09-14spring-jdbc.xml<?xmlversion="1.0"encoding="UTF-8"?><beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:contex......
  • @Transactional 失效场景
    @Transactional失效场景1.方法不是public修饰的。2.同一个类里面,不同方法的相互调用必须都带上@Transactional注解,否则会失效。3.默认是针对runtimeException异常进行回滚,如果需要对其他异常回滚需要使用rollbackFor属性指定异常类型。4.异常被你的catch“吃了”导致@Tran......
  • 签到小程序开发如何保证数据安全性?
    在日常生活中我们可能会接触到一些签到小程序,比如活动签到,上班打卡等。那么随之而来的就是数据的安全性问题。接下来,广州名锐讯动将针对签到小程序开发如何保证数据安全性这个问题总结了一些有效的方法和措施。1. 用户身份验证:签到小程序开发中为了防止未经授权的访问和操纵,我们要......
  • 在spring、tomcat中使用多数据源并支持分布式事务管理
    题目起得有点模糊,第一次接触这东西,还不怎么理解。 起因: 小项目,没有用分布式,但要操作两个数据库。本以为随便用spring配置两个数据源就搞定,查询是没问题,问题是有一个数据库老是插不进数据。Google狂搜之后,大概了解到是事务控制的问题。我用的是spring的声明式事务管理(<tx:annotat......