springboot 事务管理 @Transactional
程序员文章站
2022-05-31 15:39:33
...
1、当方法上没有加 @Transactional ,此时执行删除操作,在删除操作后出现了异常,此刻删除操作是不会回滚的。
public void deleteEmpById(Integer empNo){
EmpExample empExample = new EmpExample();
EmpExample.Criteria criteria = empExample.createCriteria();
criteria.andEmpnoEqualTo(empNo);
empMapper.deleteByExample(empExample);
//此处出现了异常
int a = 1/0;
}
2、当方法上带有 @Transactional,如果执行删除操作,在删除操作后出现了异常,此刻删除操作回滚。
3、当方法上带有 @Transactional,如果执行删除操作,在删除操作后出现了异常,但是你try-catch 处理了这个异常,并未抛出异常,此刻删除操作不会回滚。 可以使用 throw new RuntimeException("出错了"); 让删除回滚。
@Transactional
public void deleteEmpById(Integer empNo){
EmpExample empExample = new EmpExample();
EmpExample.Criteria criteria = empExample.createCriteria();
criteria.andEmpnoEqualTo(empNo);
empMapper.deleteByExample(empExample);
try {
int a = 1/0;
}catch (Exception e){
}
}
4、@Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
推荐阅读
-
springboot源码分析系列(一)--核心注解@SpringBootApplication
-
Oracle并发控制、事务管理学习笔记
-
springboot+mybatis报错找不到实体类的问题
-
SpringBoot validator参数验证restful自定义错误码响应方式
-
springboot 项目启动后无日志输出直接结束的解决
-
SpringBoot+Spring Security无法实现跨域的解决方案
-
springboot aspect通过@annotation进行拦截的实例代码详解
-
springboot整合shiro多验证登录功能的实现(账号密码登录和使用手机验证码登录)
-
springboot 实现记录业务日志和异常业务日志的操作
-
使用@Transactional 设置嵌套事务不回滚