模型服务连接失败
JavaMySQL
分类
数据库
难度
未设置
来源数
1
更新时间
2026/03/29 15:43

答案

1. 访问权限问题,spring 要求被代理方法必须是public的,因此如果使用了不当的访问权限修饰符就会导致事务失效。 2. 事务方法被final修饰,spring使用aop来生成代理类实现事务功能,如果被final修饰则目标方法无法被重写,导致事务失效。 3. 调用内部方法,导致注解失效(声明式事务),具体失效原因是内部调用调用的是bean本身的方法,而外部调用注解方法调用的是代理类的方法。解决方法:将事务方法分离到其他类、在类中注入自身类(不会导致循环依赖)、使用 AopContext.currentProxy() 获取代理对象并调用方法等。 4. 数据库引擎不支持事务,例如myisam引擎不支持事务 5. 注解所在的类是否加载成bean 6. propagation配置是否正确 7. 异常被捕获处理,或者抛出的错误的异常。spring事务根据抛出异常来进行回滚,因此如果异常被try-catch了自然不会回滚,导致事务失效;且默认捕获runtimexception,如果要捕获其他的异常,需要进行配置。

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(框架).md

knowledge_note
Question 38: 事务失效有哪几种情况? Source answer: 1. 访问权限问题,spring 要求被代理方法必须是public的,因此如果使用了不当的访问权限修饰符就会导致事务失效。 2. 事务方法被final修饰,spring使用aop来生成代理类实现事务功能,如果被final修饰则目标方法无法被重写,导致事务失效。 3. 调用内部方法,导致注解失效(声明式事务),具体失效原因是内部调用调用的是bean本身的方法,而外部调用注解方法调用的是代理类的方法。解决方法:将事务方法分离到其他类、在类中注入自身类(不会导致循环依赖)、使用 AopContext.currentProxy() 获取代理对象并调用方法等。 4. 数据库引擎不支持事务,例如myisam引擎不支持事务 5. 注解所在的类是否加载成bean 6. propagation配置是否正确 7. 异常被捕获处理,或者抛出的错误的异常。spring事务根据抛出异常来进行回滚,因此如果异常被try-catch了自然不会回滚,导致事务失效;且默认捕获runtimexception,如果要捕获其他的异常,需要进行配置。 Reviewed answer: 常见原因包括:方法非 public、final 方法、同类内部调用绕过代理、数据库引擎不支持事务、类未被 Spring 管理、传播行为配置不当、异常被吞掉或异常类型不触发默认回滚等。