spring事物回滚

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

 

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


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

wKioL1bIfp7hHT2YAAAqkz-eK5I593.png
引用jdbc包下的datasource下的DataSourceTransactionManager
固然,也一样要为它匹配数据源,即dataSource,由于咱们要告诉事务管理器它操做的对象数据是谁spring

 

 

2.因为咱们是采用注解方式操做事务,因此须要在配置文件中启动事务注解:ide

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

 

 

 

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

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


以上能够举个通俗的例子:对象

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

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

相关文章
相关标签/搜索