当前位置: 首页 > news >正文

springboot中的事务

使用:

@EnableTransactionManagement  为总开关,总闸

@Transactional 具体的函数开关,具体的灯

------------------------------------------------------------------------------------------------------------------------

失效的情况:

1. 最常见的,方法内部调用, 例如:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
private UserMapper userMapper;

    // 外部调用这个方法,它没有 @Transactional 注解
public void createUserWrong(User user) {
// ... 一些其他逻辑 ...
insertUser(user); // <--- 问题所在!这是内部调用
}

    @Transactional
public void insertUser(User user) {
userMapper.insert(user);
}
}

为啥:

Spring 的事务是通过 AOP 代理实现的。当一个 Bean 被 Spring 容器管理时,Spring 会为它创建一个代理对象。外部对该 Bean 方法的调用,实际上是先调用代理对象,代理对象在调用实际方法前开启事务。而如果你在一个 Bean 的内部,通过 this 关键字来调用它自己的另一个方法,这个调用会直接指向原始对象,从而绕过了代理对象,事务自然就失效了。

2. 方法访问权限不够,例如:

@Service
public class OrderService {

    @Transactional
private void createOrderInternal(Order order) { // <--- private 方法,事务失效
// ... 数据库操作 ...
}
}

为啥:

Spring AOP 代理默认只能拦截 public 方法。

3.异常类型没有捕捉对,例如:

@Transactional(rollbackFor = MyBusinessException.class)

public void updateStock(Long productId) throws Exception {                  productMapper.decreaseStock(productId);

        throw new BizException("一个自定义的业务异常"); 

}

小插曲,如果裸一个@Transactional,哪些情况下会回滚(非受检异常):

  1. RuntimeException (运行时异常) 及其所有子类。

  2. Error (错误) 及其所有子类。

常见举例:

  • NullPointerException: 对一个 null 对象进行操作。

  • IllegalArgumentException: 传入了一个不合法的参数。

  • IndexOutOfBoundsException: 数组或列表越界。

  • IllegalStateException: 对象处于一个不正确的状态。

  • ClassCastException: 类型转换异常。

  • ArithmeticException: 数学计算异常,如除以零。

  • OutOfMemoryError: 内存溢出错误。

  • StackOverflowError: 栈溢出错误。

4. 数据库引擎不支持事务,这个不多说,项目技术选型的时候就知道了。

http://www.dtcms.com/a/565809.html

相关文章:

  • 短网址生成api接口苏州百度 seo
  • python中的多线程【threading】
  • 做电影小视频在线观看网站谷歌找网站后台
  • 开发常用软件清单
  • 网站设计外文文献免费网站正能量不用下载
  • 结合HOG特征与支持向量机(SVM)的车牌字符识别系统
  • 长沙高端网站制作公司丹灶建网站
  • Nacos配置安全治理:把数据库密码从YAML里请出去
  • RSA 算法数学原理
  • 网站建设应注意哪些事项wordpress 收费 视频
  • 外贸找客户有什么网站平台公司会倒闭吗
  • P5091 【模板】扩展欧拉定理
  • C盘爆满急救指南
  • 天台高端网站建设公司专业网站设计公司价格
  • 温州专业微网站制作公司天猫网页版
  • 免费网络推广网站王烨重生
  • 微气象仪:精准感知微环境气象变化
  • svn使用之创建分支进行开发
  • 拍卖网站建设公司社交类电商平台
  • Elasticsearch 8 安装与配置
  • 邯郸做网站推广找谁盛大游戏优化大师
  • HR1124S/HR1154D:赋能直流电机高效安全运行的核心芯片
  • 化妆品网站网页设计营销培训师
  • 网站积分解决方案标书制作模板
  • 前端直接渲染Markdown
  • Vue 3.5 新特性——useTemplateRef:简化模板引用的革命!
  • 网站开发技术三大件网页设计与制作教程期末考试试题
  • 赣州制作网站企业个人简历自我评价
  • 寄存器与存储器的区别(TLB和Cache,指令流水线分析)
  • 思维链(CoT)× 智能体(Agent)× 提示词(Prompt)讲解