spring框架的事务管理
来源:互联网 发布:网页制作软件手机 编辑:程序博客网 时间:2024/05/16 07:09
spring提供的事务处理可分为两类:编程式的事务和声明式的事务。
先看看传统的JDBC事务。一般是得到数据源,然后获得连接Connection,数据源一般由容器管理,一般的应用服务器具备这个功能,并且,连接和数据源不同,它并不时线程安全的,所以每次都要新建连接,并且在结束时关闭。传统JDBC事务管理示例代码:
缺点:代码长,重复代码很多,容易出错,一旦忘记关连接,错误严重。
再来就是spring提供的编程式事务处理
TranscationDefinition 事务属性定义;TranscationStats当前事务,可以提交、回滚;
PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类 AbstractPlatformTransactionManager,我们使用的事务管理类例如 DataSourceTransactionManager等都是这个类的子类。
使用spring编程式事务流程(示例代码):
这里,也可以使用spring的事务模板,利用回调来做,可以省去提交和回滚的代码量
示例代码:
最厉害的一种,spring声明式事务管理,声明式事务不再为EJB独有。
实现了AOP思想,提供TransactionInterceptor拦截器以及TransactionProxyFactoryBean代理类,对组件进行事务代理
在spring1.x和spring2,声明式事务管理的配置有一定差异,spring2做了优化,篇幅原因,详细内容可参照我另一篇笔记 "spring1.x与spring2声明式事务管理的配置"
先看看传统的JDBC事务。一般是得到数据源,然后获得连接Connection,数据源一般由容器管理,一般的应用服务器具备这个功能,并且,连接和数据源不同,它并不时线程安全的,所以每次都要新建连接,并且在结束时关闭。传统JDBC事务管理示例代码:
Connect con = null;
try{
con = DBFactory.getConnection();
con = setAutoCommit(false);
/* 数据库操作 */
con.commit(); //提交
}
catch(Exception e){
con.rollback();
}
finally{
con.close();
}
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);
}
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){ //注入数据库管理对象
/* 数据库操作 */
}
})
}
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声明式事务管理的配置"
- spring框架的事务管理
- Spring框架的事务管理
- Spring框架下的事务管理
- Spring框架的事务管理应用分析
- Spring框架的事务管理应用分析
- Spring框架的事务管理及应用
- Spring框架的事务管理应用分析
- Spring框架的事务管理应用分析
- Spring框架的JDBC模板和事务管理
- Spring JDBC-混合框架的事务管理
- Spring JDBC-混合框架的事务管理
- Spring JDBC-混合框架的事务管理
- 12 Spring框架 SpringDAO的事务管理
- spring框架中的事务管理
- Spring框架中的事务管理
- Spring框架学习(14):Spring的事务管理
- Spring , Spring的事务管理
- Spring框架学习笔记----事务管理
- vim学习小结
- ORACLE触发器语法
- 编程小语
- Epclipse常用插件大全
- SIP 软电话开发环境的建立
- spring框架的事务管理
- strftime
- 从今天开始,花半年的时间弄.NET
- topcoder
- 使控件拥有透明背景
- SQL 数据库所有者 (dbo)与数据库角色 db_owner 区别
- C#的多线程能力
- 视频资讯(2007-8-29)
- 约瑟夫问题的java简单算法