Spring事务失效
常见的Spring事务失效场景
-
方法访问权限不是public
// 错误示例 @Transactional protected void saveData() { // 事务不会生效 } // 正确示例 @Transactional public void saveData() { // 事务会正常生效 } -
同一个类中方法调用
@Service public class UserService { // 直接调用同类中的@Transactional方法,事务会失效 public void processData() { this.saveUser(); // 事务不生效 } @Transactional public void saveUser() { // 保存用户逻辑 } } -
try-catch吞掉异常
@Transactional public void saveData() { try { // 数据库操作 } catch (Exception e) { // 吞掉异常,事务不会回滚 } } -
手动抛出检查异常但未指定rollbackFor
// 错误示例 @Transactional public void saveData() throws Exception { // 操作 throw new Exception("error"); // 默认只对RuntimeException回滚 } // 正确示例 @Transactional(rollbackFor = Exception.class) public void saveData() throws Exception { // 操作 throw new Exception("error"); } -
数据库引擎不支持事务
- MySQL的MyISAM存储引擎不支持事务
解决方案
Spring事务失效解决方案:
- 确保@Transactional注解的方法是public的
- 跨类调用事务方法
- 正确处理异常,不要吞掉异常
- 根据业务需要指定rollbackFor属性
- 确保数据库引擎支持事务
1万+

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



