Spring事务不生效问题汇总
2017-06-03 15:03
232 查看
在实际项目开发中,经常会由于配置错误或使用不当,导致spring事务管理不生效。如下总结了几点事务不生效的情况:
Spring事务的传播机制:
Propagation支持7种不同的传播机制:
REQUIRED:如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
SUPPORTS: 如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。
NOT_SUPPORTED:总是非事务地执行,并挂起任何存在的事务。
REQUIRESNEW:总是开启一个新的事务。如果一个事务已经存在,则将这个存在的事务挂起。
MANDATORY:如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。
NEVER:总是非事务地执行,如果存在一个活动事务,则抛出异常
NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。
1、确认创建的mysql数据库表引擎是InnoDB,MyISAM不支持事务。
2、确认调用的类是由spring容器管理的代理类。
AopUtils.isAopProxy(Object object) AopUtils.isCglibProxy(Object object) //cglib AopUtils.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属性执行。
相关文章推荐
- 【Spring】spring-mvc hibernate druid jdbc等数据源事务配置详解(解决注解事务不生效问题)
- Spring事务管理不生效问题
- [Java][Spring]Spring事务不起作用 问题汇总
- spring中注解式事务不生效的问题
- Spring基础系列-Spring事务不生效的问题与循环依赖问题
- Spring service本类中方法调用另一个方法事务不生效问题
- spring 事务处理中,同一个类中:A方法(无事务)调B方法(有事务),事务不生效问题
- spring 事务不起作用 问题汇总
- Spring事务不起作用 问题汇总
- Spring 配置mysql事务不生效问题解决
- Spring-service本类中方法调用另一个方法事务不生效问题
- spring中事务不生效问题
- Spring service本类中方法调用另一个方法事务不生效问题
- spring配置hibernate事务aop不生效的问题
- spring 事务配置以及事务内自我调用失效问题汇总
- [Java][Spring]Spring事务不起作用 问题汇总
- Spring事务不起作用 问题汇总
- springboot+mybatis解决多数据源切换事务控制不生效的问题
- [Java][Spring]Spring事务不起作用 问题汇总
- 今天用spring 事务出了一个很郁闷的问题