Spring事务不生效问题汇总
来源:互联网 发布:金山软件成都分公司 编辑:程序博客网 时间:2024/06/06 18:34
在实际项目开发中,经常会由于配置错误或使用不当,导致spring事务管理不生效。如下总结了几点事务不生效的情况:
1、确认创建的mysql数据库表引擎是InnoDB,MyISAM不支持事务。
2、确认调用的类是由spring容器管理的代理类。
AopUtils.isAopProxy(Object object)AopUtils.isCglibProxy(Object object) //cglibAopUtils.isJdkDynamicProxy(Object object) //jdk动态代理<aop:config proxy-target-class="true" />可强制cglib代理
3、调用的方法必须是public,否则事务不起作用。这一点由Spring的AOP特性决定的。
4、spring切点是否配置错误,或使用了springmvc,可能是context:component-scan重复扫描引起的。
5、抛出一个runtimeException才能回滚,Spring使用声明式事务处理,默认情况下,如果被注解的数据库操作方法中发生了unchecked异常,所有的数据库操作将rollback;如果发生的异常是checked异常,默认情况下数据库操作还是会提交的。
6、Spring的事务传播策略在内部方法调用时将不起作用。
public int save(String name, int age) throws Exception { insert(name, age); return 1; } @Transactional public void insert(String name, int age){ jdbcTemplate.update("insert into user(id,name,age)values(1,'"+name+"',"+age+")"); jdbcTemplate.update("insert into user(id,name,age)values(2,'"+name+"',"+age+")"); jdbcTemplate.update("insert into user(id,name,age)values(1,'"+name+"',"+age+")"); }
Spring事务的传播机制:
Propagation支持7种不同的传播机制:
REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。
NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。
REQUIRESNEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。
阅读全文
2 0
- Spring事务不生效问题汇总
- spring事务注解不生效
- Spring-Mybatis 子方法事务不生效问题
- spring配置hibernate事务aop不生效的问题
- Spring事务不生效的解决过程
- spring mvc 事务不生效 不回滚
- spring mvc 事务不生效 不回滚
- spring mvc 注解事务不生效
- spring4整合hibernate4事务不生效问题
- spring事务 方法调用内部方法 事务不生效
- 【Spring】spring-mvc hibernate druid jdbc等数据源事务配置详解(解决注解事务不生效问题)
- Spring service本类中方法调用另一个方法事务不生效问题
- Spring service本类中方法调用另一个方法事务不生效问题
- Spring 开启事务类调用本类方法不生效问题
- Spring service本类中方法调用另一个方法事务不生效问题
- Spring service本类中方法调用另一个方法事务不生效问题
- Spring service本类中方法调用另一个方法事务不生效问题
- Spring-service本类中方法调用另一个方法事务不生效问题
- 闭包 匿名函数的调用 链式作用域 预解析机制
- hadoop运行WordCount.jar
- 机器学习算法对数据的要求以及使用的情况
- 0526 POJ#1088&G2n#C-滑雪
- Android Date、long、String相互转换的工具类
- Spring事务不生效问题汇总
- mysql必知必会学习笔记
- ORACLE数据库SQL语句的执行过程
- PAT--1032. Sharing
- JAVA设计模式(单例模式)
- ThreadLocal线程本地变量
- python实现房价预测,采用回归和随机梯度下降法
- socket之TCP多线程客户服务器编程
- Joseph