Spring 的官方的事务控制

Spring 官方版的事务控制

  1. 什么是事务?

事务是数据库(RDB)保证业务操作完整性的一种机制(强一致性)

  1. 事务在那里控制

业务层控制(Service 或Biz 或Business)

  1. 如何控制事务(不同的底层不同的控制)

如果是JDBC:----Connnection

Connection.setAutoCommit(false)

Connection.commit()

Connection.rollback()

如果是Hibernate ------Session ---SessionFactory

Transaction tx = session.beginTransaction();

Tx.commit();

Tx.rollback();

  1. Spring中如何控制事务(AOP 动态代理开发)

1) 原始对象(Service 调用Dao完成业务处理)

创建Service接口和ServiceImpl接口(由于Service需要使用Dao所以私有化然后进行注入)

2) 额外功能:

【1】     控制事务的代码MethodInterceptor注入 SessionFactory

  • org.springframework.orm.hibernate3.HibernateTransactionManager

【2】     事务属性:

隔离属性,ISOLATION

解决并发问题的特点。

并发(同一时间,多个用户访问相同的数据)

  1. 数据的脏读:一个事务读取了另一个事务未提交的数据(隔离属性可以解决)ISOLATION_READ_COMMITIED      默认
  2. 数据的不可重复读:一个事务对相同的数据进行多次读取,结果不一致解决:ISOLATION_REPREATALBE_READ    对应的是数据库的行锁
  3. 数据的幻影读:在一个事务,进行统计工作中,对相同的表进行多次统计,但是结果不一致。ISOLATION_SERIALIZABLE_READ

传播属性

事务嵌套:(Service调用其他Service(大型项目中才会有))

普遍(Service-DAO)

PROPAGATION_REQUIRED:当外部不存在事务,则开启事务,

当外部存在事务,则进行融合

增删改方法使用

PROPAGATION_SUPPORTS:当外部不存在事务,则不开启事务

当外部存在事务,则融合事务

查询的时候使用

只读属性,默认是false

如果你的事务是查询的时候,指定read-only 为true 提高系统效率

实战中应该这么写:

异常属性,

Spring 默认对于RuntimeException 及其子类,  回滚策略

Exception 及其子类   提交策略

遇到一个异常的时候如果你想回滚:rollback-for=“异常的全限定名”

如果你不想回滚的的话:no-rollback-for=”异        常的全限定名”

超时属性(timeout)-1

当数据被另一个事务锁住的时候,通过超时属性决定等待时间

3) 切入点

4) 组装切面

开发中应该以包为基础进行切面。

实例:切面和属性

    时间: 2024-10-28 21:14:50

    Spring 的官方的事务控制的相关文章

    Spring基于注解的事务控制

    准备jar包 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.0.2.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</gro

    spring中编程式事务控制

    step1:配置xml文件 1 <!-- 事务管理bean --> 2 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 3 <property name="dataSource" ref="dataSource" /> 4 </

    (8)Spring的事务控制

    程序的"事务控制", 可以用aop实现! 即,只需要写一次,运行时候动态植入到业务方法上. Spring提供了对事务的管理. 1.事务控制概述 用户访问-->Action --> Service --> Dao 一个业务操作的成功: 调用的service是执行成功的,意味着service中调用的所有的dao是执行成功的. 因此事务应该在Service层统一控制. 1.1.编程式事务控制 自己手动控制事务,就叫做编程式事务控制.这属于细粒度的事务控制: 可以对指定的方法

    spring入门(三)【事务控制】

    在开发中需要操作数据库,进行增.删.改操作的过程中属于一次操作,如果在一个业务中需要更新多张表,那么任意一张表的更新失败,整个业务的更新就是失败,这时那些更新成功的表必须回滚,否则业务会出错,这时就要用到事务,即这个业务的操作属于一个事务,事务具有原子性.隔离性.一致性.持续性.这时便用到了事务,事务控制的目的是保证一组操作要么全部成功,要么全部失败.spring提供了对事务的支持,在spring中主要有两种方式使用事务,一.编程式事务控制:二.声明式事务控制. 一.编程式事务控制 所谓编程式事

    程序中事务控制

    事务控制概述 编程式事务控制          自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false);  // 设置手动控制事务 Hibernate代码: Session.beginTransaction();    // 开启一个事务 [细粒度的事务控制: 可以对指定的方法.指定的方法的某几行添加事务控制] (比较灵活,但开发起来比较繁琐: 每次都要开启.提交.回滚.) 声明式事务控制 Spring提供了对事务的管理, 这个就叫声明式事

    spring来了-06-事务控制

    概述 编程式事务控制 自己手动控制事务,就叫做编程式事务控制. Jdbc代码: Conn.setAutoCommite(false);  // 设置手动控制事务 Hibernate代码: Session.beginTransaction();    // 开启一个事务 [细粒度的事务控制: 可以对指定的方法.指定的方法的某几行添加事务控制] (比较灵活,但开发起来比较繁琐: 每次都要开启.提交.回滚.) spring提供的事务控制 声明式事务控制 Spring提供了对事务的管理, 这个就叫声明式

    Spring MVC一事务控制问题

    在最近一个项目中用了Spring MVC作为控制层框架,但却出现了一个让人很费解的问题:事务控制. Spring MVC的配置文件名为:springMVC-servlet.xml,内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/

    spring 事务控制 设置手动回滚 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();

    1 //假设这是一个service类的片段 2 3 try{ 4 //出现异常 5 } catch (Exception e) { 6 e.printStackTrace(); 7 //设置手动回滚 8 TransactionAspectSupport.currentTransactionStatus() 9 .setRollbackOnly(); 10 } 11 //此时return语句能够执行 12 return xxx; 如上: 当我们需要在事务控制的service层类中使用try cat

    spring的事务控制

    1.事务介绍 (1)特性:ACID Atomicity(原子性):事务中的所有操作要么全做要么全不做 Consistency(一致性):事务执行的结果使得数据库从一个一致性状态转移到另一个一致性状态 Isolation(隔离性):一个事务的执行不受其他事务的干扰 Durability(永久性):一个事务一旦提交,对数据库的影响是永久性的 (2)事务并发问题 (3)       隔离级别 2.  Spring封装了事务管理操作 1.事务操作 打开事务  回滚事务   提交事务 2.事务操作对象 因