From 132141286624f70e3811b80dcb985448c9313807 Mon Sep 17 00:00:00 2001 From: Shuaishuai Dai <2111319672@qq.com> Date: Fri, 17 Feb 2023 18:38:16 +0800 Subject: [PATCH] =?UTF-8?q?doc=20add=20spring=20=E4=BA=8B=E5=8A=A1?= =?UTF-8?q?=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- java/spring/spring/事务/Transaction.md | 52 ++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 java/spring/spring/事务/Transaction.md diff --git a/java/spring/spring/事务/Transaction.md b/java/spring/spring/事务/Transaction.md new file mode 100644 index 0000000..88c117c --- /dev/null +++ b/java/spring/spring/事务/Transaction.md @@ -0,0 +1,52 @@ +# Spring事务失效 + + + +## 子调用失效 + +Test service 有f1\f2\f3三个方法; + +```java +@Service +public class Test { + + @Transaction + public void f1(){ + f2(); + f3(); + } + + @Transaction + public void f2(){} + + public void f3(){} +} +``` + +以上代码f1方法有添加声明式事务注解 `@Transaction `不管在f1 f2 f3那个方法中出现错误三个方法都会回滚; + +```java +@Service +public class Test { + + public void f1(){ + f2(); + f3(); + } + + @Transaction + public void f2(){} + + public void f3(){} +} +``` + +以上代码f1没有添加声明式事务注解 `@Transaction`则 在执行过程中出现错误f1方法不会进行回滚,f2\f3方法不管有没有添加声明式事务都不会进行回滚,也就是说f2方法的事务失效了,因为当f1没有添加`@Transaction`注解时获取的test 对象不是代理对象,调用本身方法也不会使用到代理对象,所以f1下调用自身带有声明式事务注解的方法都会失效; + +解决办法 + +1、对需要添加事务的代码块添加编程式事务 + +2、通过其他Service对要开启事务的方法进行调用 比如在Test2 service中 注入 Test 然后调用f2方法 + +3、自己注入自己,在Test 中注入Test ,然后再f1里面使用注入的Test调用f2方法 \ No newline at end of file