您的位置:首页 > 编程语言 > Java开发

Spring 事务管理

2016-02-20 23:03 435 查看
Spring 事务管理
什么是事务回滚?
举个例子:比如转账操作,甲先成功汇给乙现金,若乙没能取款成功,那么甲的现金就应该自动退还
Spring提供了很好的事务管理体系

Spring要进行事务管理,首先需要导入以下jar包:
cglib-nodep-2.1_3.jar
org.springframework.transaction-3.1.1.RELEASE.jar

以下是采用注解方式进行事务操作
1.在配置文件里面,首先配置Spring事务管理器:



引用jdbc包下的datasource下的DataSourceTransactionManager
当然,也同样要为它匹配数据源,即dataSource,因为我们要告诉事务管理器它操作的对象数据是谁

2.由于我们是采用注解方式操作事务,所以需要在配置文件中启动事务注解:



transaction-manager属性填写的就是上一步中的事务管理器

3.在需要进行事务管理的具体方法或具体类处进行注解:



在上例中,为这个类标记了:@Transactional(rollbackForClassName="RuntimeException")指的是这个类下的所有方法均赋予事务回滚操作
括号中的rollbackForClassName指的是一旦发生了指定异常,就自动进行事务回滚,例如此处指定了RuntimeException
为buy方法标记了:@Transactional(propagation=Propagation.REQUIRES_NEW),指的是赋予这个方法管理事务的标记,若当前类没有做标记而这个方法做了标记,则指只有这个方法可以操作事务
括号中的propagation是指事务的传播行为,默认是REQUIRED,指当这个事务被别的事务调用时,则进入到那个调用的事务中去
若按本例中设置为REQUIRES_NEW则指当这个事务被别的事务调用时,则先进行完当前事务,再进行那个调用的事务

以上可以举个通俗的例子:
比如甲有现金40,现在他买了两本书,一本20元,一本50元,那么他结账时按照正常来说应该是只能买得一本也就是那本20元的,而在事务管理中,结账就是一个事务,单独买每一本书也是一个事务,如果我们设置为REQUIRES,则表示按照结账时的事务来进行,也就是在结账第二本时发现余额不足,则结账事务回滚,导致第一本也买不成。
若我们设置成REQUIRED_NEW,则表示在结账第一本时,就应该先将结账这个整体事务先挂起,然后去调用买第一本书的事务,成功之后,回到整体事务,但是这个时候买第二本书,所以又会进入到买第二本书的事务,发现余额不足,所以买第二本不成功,买第二本回滚,但是不影响已经成功的第一本。所以我们才将其设置为REQUIRES_NEW。

事务回滚所需要的jar包请见文末。

附件:http://down.51cto.com/data/2367390
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Spring 回滚 事务管理