Springboot事务管理@Transactional

[复制链接]
admin 发表于 2025-9-17 15:45:28 | 显示全部楼层 |阅读模式
Springboot事务管理@Transactional

注解:@Transactional
作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作。

位置:业务层的方法上、类上、接口上
  • 方法上:当前方法交给spring进行事务管理
  • 类上:当前类中所有的方法都交由spring进行事务管理
  • 接口上:接口下所有的实现类当中所有的方法都交给spring 进行事务管理

1,在application.yml配置文件中开启事务管理日志,这样就可以在控制看到和事务相关的日志信息了
  1. #spring事务管理日志
  2. logging:
  3.   level:
  4.     org.springframework.jdbc.support.JdbcTransactionManager: debug
复制代码

默认情况下,只有出现RuntimeException(运行时异常)才会回滚事务。

2,假如我们想让所有的异常都回滚,需要来配置@Transactional注解当中的rollbackFor属性,通过rollbackFor这个属性可以指定出现何种异常类型回滚事务。
  1. @Transactional(rollbackFor = Exception.class)
  2. @Override
  3. public void save(Emp emp) throws Exception {
  4.     //1.补全基础属性
  5.     emp.setCreateTime(LocalDateTime.now());
  6.     emp.setUpdateTime(LocalDateTime.now());
  7.     //2.保存员工基本信息
  8.     empMapper.insert(emp);
  9.         
  10.     //int i = 1/0;
  11.     if(true){
  12.         throw new Exception("出异常啦....");
  13.     }
  14.         
  15.     //3. 保存员工的工作经历信息 - 批量
  16.     Integer empId = emp.getId();
  17.     List<EmpExpr> exprList = emp.getExprList();
  18.     if(!CollectionUtils.isEmpty(exprList)){
  19.         exprList.forEach(empExpr -> empExpr.setEmpId(empId));
  20.         empExprMapper.insertBatch(exprList);
  21.     }
  22. }
复制代码

结论:
  • 在Spring的事务管理中,默认只有运行时异常 RuntimeException才会回滚。
  • 如果还需要回滚指定类型的异常,可以通过rollbackFor属性来指定。


3,Propagation.REQUIRES_NEW  :不论是否有事务,都创建新事务  ,运行在一个独立的事务中。

  1. @Service
  2. public class EmpLogServiceImpl implements EmpLogService {

  3.     @Autowired
  4.     private EmpLogMapper empLogMapper;

  5.     @Transactional(propagation = Propagation.REQUIRES_NEW)
  6.     @Override
  7.     public void insertLog(EmpLog empLog) {
  8.         empLogMapper.insert(empLog);
  9.     }
  10. }
复制代码
游客,如果您要查看本帖隐藏内容请回复

网站建设,公众号小程序开发,多商户单商户小程序制作,高端系统定制开发,App软件开发联系我们【手机/微信:17817817816
微信扫码

网站建设,公众号小程序开发,商城小程序,系统定制开发,App软件开发等

粤ICP备2024252464号

在本版发帖
微信扫码
QQ客服返回顶部
快速回复 返回顶部 返回列表