REQUIRES_NEW上线,连接池先崩了
周五下午两点,订单服务突然没有任何响应。不是报500,不是抛异常,是整个服务像被按了暂停键——所有请求进来就挂起,超时后连接断开。翻遍日志,最后一条正常记录停在14:03,后面是连续的超时告警。没有OOM,没有死锁日志,GC也正常。重启,恢复。十分钟后,又卡死了。
事务传播行为七种全背没用,REQUIRES_NEW 和 NESTED 回滚差异是考点
给组里转正前的校招生做 mock 面试,问到事务传播行为,他把七种背得一字不差,连英文单词的顺序都没错。我接着问:REQUIRES_NEW 的内层事务提交之后,外层回滚了,内层的数据还在吗?换成 NESTED 呢?他愣了十秒。背诵和理解的距离,就是这一问。
@Transactional 嵌套 REQUIRES_NEW 为什么连接池爆了?
上篇文章解决了"同一个类里方法调方法不走代理"的问题——你在方法 A 上加 @Transactional,调本类方法 B,B 的事务配置被无视,退化为 outer 事务的一部分。
Spring 事务传播级别 REQUIRED 和 REQUIRES_NEW 的区别与选择
上线后第二天,运营反馈一条订单状态没更新,查日志发现异常明明抛了,数据库却纹丝不动。@Transactional 也加了,回滚就是没生效。
Spring 里这个注解用错,事务等于没加
先说结论@Transactional 不是"加上就回滚"的开关。它靠 AOP 代理实现。代理的原理不复杂:方法被包了一层,事务是代理开的,不是 Spring 凭空给的。所以只要调用没经过代理,或者异常没传出去,事务就等于没加。线上常见的,是下面六种。
面试官:Spring事务的传播行为有几种,分别介绍一下用法?
前言共分为10个章节1.Java基础 2.网络 3.Java并发 4.JVM和JMM 5.数据库6.设计模式 7.Linux 8.框架 9.算法 10.
Spring 如何在一个事务中开启另一个事务?
作者:Mazin来源:https://my.oschina.
面试官:Spring事务是如何传播的?
这个方法本身没做什么事,主要是调用了父类的invokeWithinTransaction方法,注意最后一个参数,传入的是一个lambda表达式,而这个表达式中的调用的方法应该不陌生,在分析AOP调用链时,就是通过这个方法传递到下一个切面或是调用被代理实例的方法,忘记了的可以回去看看。
事务里调外部接口?用三层门禁拦住
AI 写 Java 代码时,有一个很隐蔽的坏习惯:为了“保证一致性”,顺手把 HTTP、文件解析、第三方 SDK 全塞进 @Transactional 方法。