PROPAGATION_REQUIRES_NEW事务管理中的变量

PROPAGATION_REQUIRES_NEW传播方式对于第二个事务,会产生一个全新的Connection来处理.两个连接的操作类似于:
[Java] view plain copy
  1. Connection con1 = ds.getConnection();  
  2. con1.setAutoCommit(false );  
  3. con1.executeUpdate(sql1);  
  4. con1.executeUpdate(sql2);  
  5. ...  
  6. Connection con2 = ds.getConnection();  
  7. con2.setAutoCommit(false );  
  8. con2.executeUpdate(sql1);  
  9. con2.exeucteUpdate(sql2);  
  10. ...  
  11. con2.commit();  
  12. con2.setAutoCommit(true );  
  13. con2.close();  
  14.   
  15. con1.executeUpdate(sqln);  
  16. ...  
  17. con1.commit();  
  18. con1.setAutoCommit(false );  
  19. con1.close();<pre></pre>  

Spring事务管理中事务涉及的变量主要有:

变量在两事务(第一个事务为PROPAGATION_REQUIRED,第二个事务为PROPAGATION_REQUIRES_NEW)创建、执行、完成过程中的变化如下:

 

第一个事务       
 TransStatus1  Transaction1  ConnectionHolder1 
 TransactionTransaction1 ConnectionHolderConnectionHolder1 SynchronizedWithTransactionTRUE
 newTransactionTRUE   Connectioncon1
 newSynchronizationTRUE resource   
 suspendedResourcesnull keydataSource Synchronizations 
 savepointnull valueConnectionHolder1 ArrayList1empty
         
第二个事务:doGetTransaction
Transaction2 
ConnectionHolderConnectionHolder1
         
doSuspendTransaction    
 Transaction2  SuspendedResourcesHolder1 
 ConnectionHoldernull suspendedSynchronizationsArrayList1
   suspendedResourcesConnectionHolder1
 resource   
 null  Synchronizations 
    null 
         
doBegin
TransStatus2 Transaction2 ConnectionHolder2 
TransactionTransaction2ConnectionHolderConnectionHolder2SynchronizedWithTransactionTRUE
newTransactionTRUEConnectioncon2
newSynchronizationTRUEresource 
suspendedResourcesSuspendedResourcesHolder1keydataSourceSynchronizations 
 valueConnectionHolder2ArrayList2empty
savepoinenull
         
triggerBeforeCommittriggerBeforeCompletiondoCommit:con2.committriggerAfterCompletion 
doCleanupAfterCompletion
con2恢复autoCommit与isolationLevelresource Synchronizations 
关闭连接null null 
         
resume    
已经恢复到第一个事务doBegin刚完成状态 resource  Synchronizations 
 keydataSource ArrayList1empty
 valueConnectionHolder1  
         

源码:

[Java] view plain copy
  1. public   void  addEmployee(Employee employee)  throws  SQLException {  
  2.   transactionTemplate.execute(new  TransactionCallback() {  
  3.     public  Object doInTransaction(TransactionStatus ts) {  
  4.       try  {  
  5.         jdbcTemplate.update("INSERT INTO Employee (username,age) VALUES(?, ?)" ,   
  6.           new  Object[]{ "lizi" , new  Integer( 22 )});  
  7.         departmentDao.addDepartment();  
  8.         jdbcTemplate.update("INSERT INTO Employee (username,age) VALUES(?, ?)" ,   
  9.           new  Object[]{ "lijun" , new  Integer( 55 )});  
  10.         System.out.println("更新成功" );  
  11.   
  12.       } catch  (Exception ex) {  
  13.         ex.printStackTrace();  
  14.         System.out.println("更新失败" );  
  15.         ts.setRollbackOnly();  
  16.       }  
  17.       //ts.setRollbackOnly();   
  18.       return   null ;  
  19.     }  
  20.   });  
  21. }  
[Java] view plain copy
  1. //DepartmentDao.java   
  2. public   void  setTransactionTemplate(  
  3.     TransactionTemplate deptTransactionTemplate) {  
  4.   this .transactionTemplate = deptTransactionTemplate;  
  5.   deptTransactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRES_NEW);  
  6.     
  7.   DataSourceTransactionManager manager = (DataSourceTransactionManager)deptTransactionTemplate.getTransactionManager();  
  8.   DataSource ds = manager.getDataSource();  
  9.     
  10.   jdbcTemplate = new  JdbcTemplate(ds);  
  11. }  
  12.   
  13. public   void  addDepartment() {  
  14.   transactionTemplate.execute(new  TransactionCallback() {  
  15.   
  16.     public  Object doInTransaction(TransactionStatus status) {  
  17.       try  {  
  18.         jdbcTemplate.update("insert into department (dept,deptName) values('IT','IT department')" );  
  19.       } catch  (Exception ex) {  
  20.         ex.printStackTrace();  
  21.         status.setRollbackOnly();  
  22.       }  
  23.       return   null ;  
  24.     }  
  25.       
  26.   });  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值