原文地址:http://www.iteye.com/topic/1123049

1、问题
Java代码  
  1. Connection conn =
  2. DataSourceUtils.getConnection();
  3. //开启事务
  4. conn.setAutoCommit(false);
  5. try {
  6. Object retVal =
  7. callback.doInConnection(conn);
  8. conn.commit(); //提交事务
  9. return retVal;
  10. }catch (Exception e) {
  11. conn.rollback();//回滚事务
  12. throw e;
  13. }finally {
  14. conn.close();
  15. }
Java代码  
  1. Session session = null;
  2. Transaction transaction = null;
  3. try {
  4. session = factory.openSession();
  5. //开启事务
  6. transaction = session.beginTransaction();
  7. transation.begin();
  8. session.save(user);
  9. transaction.commit();//提交事务
  10. } catch (Exception e) {
  11. e.printStackTrace();
  12. transaction.rollback();//回滚事务
  13. return false;
  14. }finally{
  15. session.close();
  16. }

缺点:不一致的事务管理,复杂

2、高层次解决方案(编程式实现事务)
Java代码  
  1. public interface PlatformTransactionManager {
  2. TransactionStatus getTransaction(TransactionDefinition definition)
  3. throws TransactionException;
  4. void commit(TransactionStatus status) throws TransactionException;
  5. void rollback(TransactionStatus status) throws TransactionException;
  6. }
Java代码  
  1. //1.获取事务管理器
  2. PlatformTransactionManager txManager = (PlatformTransactionManager)
  3. ctx.getBean("txManager");
  4. //2.定义事务属性
  5. DefaultTransactionDefinition td = new DefaultTransactionDefinition();
  6. td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
  7. //3开启事务,得到事务状态
  8. TransactionStatus status = txManager.getTransaction(td);
  9. try {
  10. //4.执行数据库操作
  11. System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
  12. //5、提交事务
  13. txManager.commit(status);
  14. }catch (Exception e) {
  15. //6、回滚事务
  16. txManager.rollback(status);
  17. }
3、高层次解决方案(模板解决方案
Java代码  
  1. //1.获取事务管理器
  2. PlatformTransactionManager txManager = (PlatformTransactionManager)
  3. ctx.getBean("txManager");
  4. //2、定义事务管理的模板
  5. TransactionTemplate transactionTemplate = new TransactionTemplate(txManager);
  6. //3.定义事务属性
  7. transactionTemplate.
  8. setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
  9. //4.回调,执行真正的数据库操作,如果需要返回值需要在回调里返回
  10. transactionTemplate.execute(new TransactionCallback() {
  11. @Override
  12. public Object doInTransaction(TransactionStatus status) {
  13. //5.执行数据库操作
  14. System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
  15. return null;
  16. }
  17. });
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代理)
实施流程:


 



 

转载于:https://www.cnblogs.com/davidwang456/p/5733068.html

Spring对事务管理的支持的发展历程--转相关推荐

  1. Spring对事务管理的支持的发展历程(基础篇)

    1.问题 Java代码   Connection conn =    DataSourceUtils.getConnection();   //开启事务   conn.setAutoCommit(fa ...

  2. 谈Spring的事务管理

    开篇前  Spring发展至今已到v5,本篇旨在探究Spring对于事务管理的方式的发展变化,算是对许久以来使用的总结,同时也希望和想深入Spring事务管理的小伙伴们做一个分享.  开篇  Spri ...

  3. Spring JDBC-Spring对事务管理的支持

    概述 事务管理关键抽象 Spring事务管理的实现类 Spring JDBC 和MybBatis的事务管理器的配置 JPA的事务管理器的配置 Hibernate的事务管理器的配置 JTA 的事务管理器 ...

  4. Spring的事务管理1

    事务的回顾: 事务:逻辑上的一组操作,组成这组事务的各个单元,要么全部成功,要么全部失败 事务的特性:ACID 原子性(Atomicity):事务不可分割 一致性(Consistency):事务执行前 ...

  5. Spring JDBC-Spring事务管理之数据库事务基础知识

    概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...

  6. spring教程--事务管理

    Spring的事务管理 1.1 事务: 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性: ACID: 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致. 隔离性:一个事 ...

  7. batch spring 重复执行_一个3年老javaer竟然连Spring的事务管理都不知道,惊呆了

    1.事务介绍 事务(Transaction),一般是指要做的或所做的事情.在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 这里我们以取钱的例子来讲解:比如你去ATM ...

  8. spring,mybatis事务管理配置与@Transactional注解使用[转]

    spring,mybatis事务管理配置与@Transactional注解使用[转] spring,mybatis事务管理配置与@Transactional注解使用 概述 事务管理对于企业应用来说是至 ...

  9. 初见Spring之事务管理

    初见Spring之事务管理 在很多业务的场景下,需要对数据库进行操作,在对访问数据库的时候,尤其是对数据的内容进行增删改操作时,引入事务就是必要的了.在通常情况下利用Java自带的JDBC操作完成事务 ...

最新文章

  1. CSS中的emmet语法(使用缩写的方式提高书写html编写速度)
  2. Oracle 监听器无法启动(TNS-12537,TNS-12560,TNS-00507)
  3. VMware中CentOS7网卡无法启动故障
  4. Java 8 CompletableFuture
  5. 只腐蚀毛刺 腐蚀算法_图像的腐蚀 膨胀及细化
  6. 使用哈工大LTP做自然语言处理任务基础demo
  7. 空间mysql数据还原_mysql通过表空间来恢复或者传递数据
  8. 全球首发!5G折叠屏笔记本电脑ThinkPad X1 Fold震撼上市
  9. 任务寄存器TR:GDT、LDT、IDT、TR、TSS之间的关系
  10. 525 Contiguous Array 连续数组
  11. DeBruijin HDU - 2894(????????)
  12. 华三服务器监控系统,博世DS7400周界防盗报警系统联动H3C监控系统说明概要
  13. ThinkPad T430i黑苹果Yosemite 10.10.3成功显卡驱动
  14. 倒计时1天!MDCC 2016移动开发者大会全日程公布(表)
  15. 局域网查看工具V1.60.exe与局域网助手(LanHelper)的试用
  16. Python flask web基础(三)用wangeditor实现富文本编辑
  17. h0043. 奇怪的汉诺塔
  18. 2023 IEEE Fellow出炉:唐立新、宗成庆、朱军、姬水旺、李佳等入选
  19. 二维码如何转为链接,看了这篇文章才知道多好用!
  20. 在BIOS中修改IMM的方法

热门文章

  1. java简述对象的组合_Java程序运行和对象创建过程简述
  2. 纯jsp实现评论功能_基于云开发的小程序版本更新、评论功能改进、后台管理的实现...
  3. 未发现数据源名称并且未指定默认驱动程序_10个有用的HTML5功能,您可能未使用
  4. 单链表的基本操作_数据结构-单链表的基本操作
  5. java rest post list,Java RestTemplate.postForLocation方法代码示例
  6. 栈、堆、静态存储区和程序的内存布局
  7. 在linux中运行多文件,在Linux中打开了太多文件(Too many open files)的三种解决方法...
  8. layui如何集成文件服务器,layui使用upload组件实现文件上传功能
  9. Oracle使用游标
  10. 二分图带权最大匹配费用流_一文掌握阻抗匹配