以下代码在业务逻辑中如果有一个地方抛错,事务是不会回滚的,因为在里面捕获了异常,且没有抛出去,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){
}
}
}
本文探讨了Spring事务管理机制中常见的一个误区:在一个方法内如果出现异常被捕获但未被重新抛出,则事务不会正常回滚。文章通过示例代码展示了如何正确地实现事务管理,并强调了异常处理的重要性。
1万+

被折叠的 条评论
为什么被折叠?



