码迷,mamicode.com
首页 > 编程语言 > 详细

关于spring事务管理

时间:2015-04-27 00:36:56      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:spring 框架

事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
这样可以防止出现脏数据,防止数据库数据出现问题。
开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。

spring
提供了几个关于事务处理的类:
TransactionDefinition //
事务属性定义
TranscationStatus //
代表了当前的事务,可以提交,回滚。
PlatformTransactionManager
这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类AbstractPlatformTransactionManager,我们使用的事务管理类例如DataSourceTransactionManager等都是这个类的子类。

一般事务定义步骤:

TransactionDefinition td = new TransactionDefinition();
TransactionStatus ts = transactionManager.getTransaction(td);
try
{ //do sth
transactionManager.commit(ts);
}
catch(Exception e){transactionManager.rollback(ts);}

spring
提供的事务管理可以分为两类:编程式的和声明式的。编程式的,比较灵活,但是代码量大,存在重复的代码比较多;声明式的比编程式的更灵活。

编程式主要使用transactionTemplate。省略了部分的提交,回滚,一系列的事务对象定义,需注入事务管理对象.
void add(){
transactionTemplate.execute( new TransactionCallback(){
pulic Object doInTransaction(TransactionStatus ts)
{ //do sth}
}
}

声明式:使用TransactionProxyFactoryBean:


PROPAGATION_REQUIRED PROPAGATION_REQUIRED PROPAGATION_REQUIRED,readOnly


围绕Poxy的动态代理能够自动的提交和回滚事务
org.springframework.transaction.interceptor.TransactionProxyFactoryBean

PROPAGATION_REQUIRED–
支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS–
支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY–
支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW–
新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED–
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER–
以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED–
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与 PROPAGATION_REQUIRED类似的操作。

本文出自 “为梦想而奋斗!” 博客,请务必保留此出处http://zhuiqiuuuu.blog.51cto.com/8372008/1638809

关于spring事务管理

标签:spring 框架

原文地址:http://zhuiqiuuuu.blog.51cto.com/8372008/1638809

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!