doc add spring 事务失效
This commit is contained in:
parent
ef8dd803cf
commit
1321412866
52
java/spring/spring/事务/Transaction.md
Normal file
52
java/spring/spring/事务/Transaction.md
Normal file
@ -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方法
|
Loading…
Reference in New Issue
Block a user