开发时候,遇到一个奇葩问题,单独部署(3情况)不会出现bug,而合并打包(4情况)时候,反而出现异常
先说明下,方法A、B、C、D方法不在一个类内,否则会导致AOP失效
@Transactional
public void A() {
}
@Transactional
public void B() {
}
@Transactional
public void C() {
A();
B();
}
1)以上方法,在C方法调用时,B方法可以查到A方法的保存的数据不?
可以的,因为AB在C方法中,是在一个事务内
@Transactional
public void A() {
}
@Transactional
public void B() {
}
public void C() {
A();
B();
}
2)以上方法,在C方法调用时,B方法可以查到A方法的保存的数据不?
可以的,虽然A、B不在一个事务内,但是调用B方法是,A方法的事务已经提交
@Transactional
public void A() {
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void B() {
}
public void C() {
A();
B();
}
3)以上方法,在C方法调用时,B方法可以查到A方法的保存的数据不?
可以的,本质和2)一样
@Transactional
public void A() {
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void B() {
}
@Transactional
public void C() {
A();
B();
}
4)以上方法,在C方法调用时,B方法可以查到A方法的保存的数据不?
不可以,C和A是一个事务,B事务单独,因为C在调B方法时,C事务并没有提交,所以B方法内查不到A方法内保存的数据
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void A() {
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void B() {
}
@Transactional
public void C() {
A();
B();
}
5)以上方法,在C方法调用时,B方法可以查到A方法的保存的数据不?
可以的,因为A和B都是单独的
具体该不该加事务,该加怎样的事务,都要具体问题具体考虑,不能因为需要实现一个功能,导致其他的bug
版权声明:本文为qq_33321609原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。