以下代码在业务逻辑中如果有一个地方抛错,事务是不会回滚的,因为在里面捕获了异常,且没有抛出去,Spring事务管理以为是成功的,所以就做了提交。
@Service
public class ClassA{
@Transactional
public void methodA(){
try{
//业务逻辑
}catch(Exception e){
logger.error();
}
}
}
@Service
public class ClassB{
@Resource
private ClassA classA;
public void methodB(){
classA.methodA();
}
}
要使得事务生效应该改为:
@Service
public class ClassA{
@Transactional
public void methodA(){
//业务逻辑
}
}
@Service
public class ClassB{
@Resource
private ClassA classA;
public void methodB(){
try{
classA.methodA();
}catch (Exception e){
}
}
}