spring框架的事务管理

spring提供的事务处理可分为两类:编程式的事务和声明式的事务。

先看看传统的JDBC事务。一般是得到数据源,然后获得连接Connection,数据源一般由容器管理,一般的应用服务器具备这个功能,并且,连接和数据源不同,它并不时线程安全的,所以每次都要新建连接,并且在结束时关闭。传统JDBC事务管理示例代码:
Connect con  =   null ;
try {
    con 
= DBFactory.getConnection();
    con 
= setAutoCommit(false);
    
/* 
数据库操作   */
    con.commit();  
//提交
}
catch (Exception e) {
    con.rollback();
}

finally {
    con.close();
}
缺点:代码长,重复代码很多,容易出错,一旦忘记关连接,错误严重。

再来就是spring提供的编程式事务处理
TranscationDefinition 事务属性定义;TranscationStats当前事务,可以提交、回滚;
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类 AbstractPlatformTransactionManager,我们使用的事务管理类例如 DataSourceTransactionManager等都是这个类的子类。
使用spring编程式事务流程(示例代码):
TranscationDefinition td  =   new  TranscationDefinition();
TranscationStats ts 
=  transcationManager.getTrancation(td);
try {
   
/*  数据库操作   */
    transcationManager.commit(ts);
//提交
}
catch(Exception e){
    transcationManager.rollback(ts);
}

这里,也可以使用spring的事务模板,利用回调来做,可以省去提交和回滚的代码量
示例代码:
TransactionDefinition td  =   new  TransactionDefinition();
TransactionStatus ts 
=  transactionManager.getTransaction(td);
void  add() {
     transactionTemplate.execute(
new TransactionCallback(){
         
public Object doInTransaction(TransactionStatus ts)
//注入数据库管理对象
             
/* 数据库操作 */
         }

     }
)
}

最厉害的一种,spring声明式事务管理,声明式事务不再为EJB独有。
实现了AOP思想,提供TransactionInterceptor拦截器以及TransactionProxyFactoryBean代理类,对组件进行事务代理
在spring1.x和spring2,声明式事务管理的配置有一定差异,spring2做了优化,篇幅原因,详细内容可参照我另一篇笔记 "spring1.x与spring2声明式事务管理的配置"
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值