spring事物回滚

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


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


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

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



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

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




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

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


以上可以举个通俗的例子:

比如甲有现金40,现在他买了两本书,一本20元,一本50元,那么他结账时按照正常来说应该是只能买得一本也就是那本20元的,而在事务管理中,结账就是一个事务,单独买每一本书也是一个事务,如果我们设置为REQUIRES,则表示按照结账时的事务来进行,也就是在结账第二本时发现余额不足,则结账事务回滚,导致第一本也买不成。

若我们设置成REQUIRED_NEW,则表示在结账第一本时,就应该先将结账这个整体事务先挂起,然后去调用买第一本书的事务,成功之后,回到整体事务,但是这个时候买第二本书,所以又会进入到买第二本书的事务,发现余额不足,所以买第二本不成功,买第二本回滚,但是不影响已经成功的第一本。所以我们才将其设置为REQUIRES_NEW。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值