Spring对事务管理的支持的发展历程--转
2024-08-30 06:35:52
原文地址:http://www.iteye.com/topic/1123049
1、问题
- Connection conn =
- DataSourceUtils.getConnection();
- //开启事务
- conn.setAutoCommit(false);
- try {
- Object retVal =
- callback.doInConnection(conn);
- conn.commit(); //提交事务
- return retVal;
- }catch (Exception e) {
- conn.rollback();//回滚事务
- throw e;
- }finally {
- conn.close();
- }
- Session session = null;
- Transaction transaction = null;
- try {
- session = factory.openSession();
- //开启事务
- transaction = session.beginTransaction();
- transation.begin();
- session.save(user);
- transaction.commit();//提交事务
- } catch (Exception e) {
- e.printStackTrace();
- transaction.rollback();//回滚事务
- return false;
- }finally{
- session.close();
- }
缺点:不一致的事务管理,复杂
2、高层次解决方案(编程式实现事务)
- public interface PlatformTransactionManager {
- TransactionStatus getTransaction(TransactionDefinition definition)
- throws TransactionException;
- void commit(TransactionStatus status) throws TransactionException;
- void rollback(TransactionStatus status) throws TransactionException;
- }
- //1.获取事务管理器
- PlatformTransactionManager txManager = (PlatformTransactionManager)
- ctx.getBean("txManager");
- //2.定义事务属性
- DefaultTransactionDefinition td = new DefaultTransactionDefinition();
- td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
- //3开启事务,得到事务状态
- TransactionStatus status = txManager.getTransaction(td);
- try {
- //4.执行数据库操作
- System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
- //5、提交事务
- txManager.commit(status);
- }catch (Exception e) {
- //6、回滚事务
- txManager.rollback(status);
- }
3、高层次解决方案(模板解决方案)
- //1.获取事务管理器
- PlatformTransactionManager txManager = (PlatformTransactionManager)
- ctx.getBean("txManager");
- //2、定义事务管理的模板
- TransactionTemplate transactionTemplate = new TransactionTemplate(txManager);
- //3.定义事务属性
- transactionTemplate.
- setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
- //4.回调,执行真正的数据库操作,如果需要返回值需要在回调里返回
- transactionTemplate.execute(new TransactionCallback() {
- @Override
- public Object doInTransaction(TransactionStatus status) {
- //5.执行数据库操作
- System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
- return null;
- }
- });
4、AOP解决方案
nSpring框架提供了一致的事务管理抽象,这带来了以下好处:
1:为复杂的事务API提供了一致的编程模型,如JTA、JDBC、Hibernate、JPA和JDO
2:支持声明式事务管理
3:提供比复杂的事务API(诸如JTA)更简单的、更易于使用的编程式事务管理API
4:非常好地整合Spring的各种数据访问抽象
实施事务的步骤
1、定义(资源)DataSource/SessionFactory……
2、定义事务管理器(管理资源的事务)
3、定义事务通知:定义了如何实施事务(实施事务的方法名和对应的事务属性),需要使用事务管理器管理事务,定义了如何选择目标对象的方法及实施的事务属性
4、定义advisor(切入点和事务通知):切入点选择需要实施事务的目标对象
5、Spring织入事务通知到目标对象(AOP代理)
实施流程:
最新文章
- 目前流行的源程序版本管理软件和项目管理软件都有哪些?各有什么优缺点?以及Github的注册过程
- MySQL 存储过程实例 与 ibatis/mybatis/hibernate/jdbc 如何调用存储过程
- ios 常用的小框架
- WinScp上传和下载
- 关于java异常的一点思考
- Using Swift with Cocoa and Objective-C(Swift 2.0版):开始--基础设置-备
- LR如何监控tomcat性能
- Linux上配置Nginx+PHP5(FastCGI)
- js事件对象
- [C++]现行的试卷封面并获取学生题目得分信息以及学号信息的原型系统
- Linux系统下安装Mysql5.7.18教程收集分享
- 带三方登录(qq,微信,微博)
- Golang中WaitGroup使用的一点坑
- element-ui隐藏组件scrollbar的使用
- maven项目pom.xml第一行报错
- SpringMVC教程1
- e3.7.2-MyEclipse-10.7安装SVN插件
- visual studio 2015下使用gcc调试linux c++开发环境搭建完整详解
- 唯品会海量实时OLAP分析技术升级之路
- 如何提升ACTION_SIM_STATE_CHANGED的接收速度?
热门文章
- 获取IP地址 &; 伪装IP地址发送请求
- jQuery最基础最全面的选择器大览
- table布局, td内部元素溢出边界问题。 (已解决)
- C# WinForm 中英文实现, 国际化实现的简单方法
- Window平台Grmon下如何使用gdb进行调试
- 搭建Linux+Jexus+MariaDB+ASP.NET[LJMA]环境
- UWP中重用C/C++代码时踩过的一些坑
- Lesson 6 Percy Buttons
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
- golang reflect