当前位置: 首页 > news >正文

易动力建设网站怎么样西安企业网站建设代理机构

易动力建设网站怎么样,西安企业网站建设代理机构,百度云 做网站,免费的看电影电视剧的appSpring事务管理高层抽象主要包括3个接口,Spring的事务主要是由他们共同完成的: PlatformTransactionManager:事务管理器—主要用于平台相关事务的管理。TransactionDefinition: 事务定义信息(隔离、传播、超时、只读)—通过配置如…

Spring事务管理高层抽象主要包括3个接口,Spring的事务主要是由他们共同完成的:

  • PlatformTransactionManager:事务管理器—主要用于平台相关事务的管理。
  • TransactionDefinition: 事务定义信息(隔离、传播、超时、只读)—通过配置如何进行事务管理。
  • TransactionStatus:事务具体运行状态—事务管理过程中,每个时间点事务的状态信息。

1 PlatformTransactionManager事务管理器

参考:/spring-framework-4.2.8.RELEASE-dist/spring-framework-4.2.8.RELEASE/docs/javadoc-api/index.html52540154818

该接口提供三个方法:

  • commit:提交事务
  • rollback:回滚事务
  • getTransaction:获取事务状态

Spring为不同的持久化框架提供了不同PlatformTransactionManager接口实现:

事务

说明

org.springframework.jdbc.datasource.DataSourceTransactionManager

使用Spring JDBC或iBatis 进行持久化数据时使用

org.springframework.orm.hibernate5.HibernateTransactionManager

使用Hibernate5.0版本进行持久化数据时使用

org.springframework.orm.jpa.JpaTransactionManager

使用JPA进行持久化时使用

org.springframework.jdo.JdoTransactionManager

当持久化机制是Jdo时使用

org.springframework.transaction.jta.JtaTransactionManager

使用一个JTA实现来管理事务,在一个事务跨越多个资源时必须使用

DataSourceTransactionManager针对JdbcTemplate、MyBatis 事务控制,使用Connection(连接)进行事务控制:

  • 开启事务 connection.setAutoCommit(false);
  • 提交事务 connection.commit();
  • 回滚事务 connection.rollback();

2 TransactionDefinition 事务定义信息

用来定义事务相关的属性的,给事务管理器用。

该接口主要提供的方法:

  1. getIsolationLevel:隔离级别获取
  2. getPropagationBehavior:传播行为获取
  3. getTimeout:获取超时时间(事务的有效期)
  4. isReadOnly 是否只读(保存、更新、删除—对数据进行操作-变成可读写的,查询-设置这个属性为true,只能读不能写),这些事务的定义信息,都可以在配置文件中配置和定制。

这些事务的定义信息,都可以在配置文件中配置和定制。

2.1 常用事务的隔离级别IsolationLevel

隔离级别含义
DEFAULT使用后端数据库默认的隔离级别(spring中的的选择项)
READ_UNCOMMITED允许你读取还未提交的改变了的数据。可能导致脏、幻读、不可重复读
READ_COMMITTED允许在并发事务已经提交后读取。可防止脏读,但幻读和 不可重复读仍可发生
REPEATABLE_READ对相同字段的多次读取是一致的,除非数据被事务本身改变。可防止脏、不可重复读,但幻读仍可能发生。
SERIALIZABLE完全服从ACID的隔离级别,确保不发生脏、幻、不可重复读。这在所有的隔离级别中是最慢的,它是典型的通过完全锁定在事务中涉及的数据表来完成的。

脏读:一个事务读取了另一个事务改写但还未提交的数据,如果这些数据被回滚,则读到的数据是无效的。

不可重复读:在同一事务中,多次读取同一数据返回的结果有所不同。换句话说就是,后续读取可以读到另一事务已提交的更新数据。相反,“可重复读”在同一事务中多次读取数据时,能够保证所读数据一样,也就是,后续读取不能读到另一事务已提交的更新数据。

幻读:一个事务读取了几行记录后,另一个事务插入一些记录,幻读就发生了。再后来的查询中,第一个事务就会发现有些原来没有的记录。

不同厂商的数据库产品,隔离级别的默认设置可能不同

  • Mysql 默认隔离级别 REPEATABLE_READ
  • Oracle 默认隔离级别 READ_COMMITTED

2.2 事务的传播行为PropagationBehavior

什么是事务的传播行为? 有什么作用?

事务传播行为用于解决两个被事务管理的方法互相调用问题

业务层两个方法面临的事务问题:

有些时候需要处于同一个事务(删除用户删除完成之后,需要同时删除用户对应的订单,需要事务回滚,例如商场工作人员删除订单业务)

有些时候不能在同一个事务(取款是一个事务操作,打印凭条是一个事务操作,例如ATM取款业务) !

事务的传播行为的7种类型:

事务传播行为类型说明
PROPAGATION_REQUIRED支持当前事务,如果不存在 就新建一个
PROPAGATION_SUPPORTS支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY支持当前事务,如果不存在,抛出异常
PROPAGATION_REQUIRES_NEW如果有事务存在,挂起当前事务,创建一个新的事务
PROPAGATION_NOT_SUPPORTED以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED如果当前事务存在,则嵌套事务执行 只对DataSourceTransactionManager 起效

主要分为三大类:

  • PROPAGATION_REQUIRED(默认值)、PROPAGATION_SUPPORTS、PROPAGATION_MANDATORY

支持当前事务, A调用B,如果A事务存在,B和A处于同一个事务 。

事务默认传播行为 REQUIRED。最常用的。

  • PROPAGATION_REQUIRES_NEW、PROPAGATION_NOT_SUPPORTED、PROPAGATION_NEVER

不会支持原来的事务,A调用B, 如果A事务存在, B肯定不会和A处于同一个事务。

常用的事务传播行为:PROPAGATION_REQUIRES_NEW

  • PROPAGATION_NESTED

嵌套事务,只对DataSourceTransactionManager有效,底层使用JDBC的SavePoint机制,允许在同一个事务设置保存点,回滚保存点

REQUIRED、REQUIRES_NEW、NESTED 区分

  • ​REQUIRED:只有一个事务(默认,推荐)
  • ​REQUIRES_NEW:存在两个事务,如果事务存在,挂起事务,重新又开启了一个新的事务
  • ​NESTED 嵌套事务,事务可以设置保存点,回滚到保存点,选择提交或者回滚

3 TransactionStatus 事务状态

事务运行过程中,每个时间点事务状态信息 !

flush(),给hibernate使用,底层发出sql的

hasSavepoint():判断是否有保留点

isCompleted():判断事务是否结束

isNewTransaction():判断当前事务是否是新开的一个事务

isRollbackOnly():判断事务是否只能回滚

setRollbackOnly():设置事务是否回滚

事务的结束:必须通过commit 确认事务提交, rollback 作用标记为回滚

数据库操作中,如果只是回滚,后面不操作,数据库在关闭连接的时候,自动发出了commit。

try {操作
} catch (){rollback
} finally {commit 
}

【三个事务超级接口对象之间的关系】

  1. 首先用户管理事务,需要先配置TransactionManager(事务管理器)进行事务管理
  2. 然后根据TransactionDefinition(事物定义信息),通过TransactionManager(事务管理器)进行事务管理;
  3. 最后事务运行过程中,每个时刻都可以通过获取TransactionStatus(事务状态)来了解事务的运行状态。

4 Spring 支持两种方式事务管理

4.1 编程式的事务管理

通过TransactionTemplate手动管理事务

在实际应用中很少使用,原因是要修改原来的代码,加入事务管理代码 (侵入性)

4.2 使用XML或注解配置声明式事务

Spring的声明式事务是通过AOP实现的(环绕通知)

​ 开发中经常使用(代码侵入性最小)–推荐使用!

http://www.15wanjia.com/news/193335.html

相关文章:

  • 网站建设0doit优化20条措施
  • 蓬莱做网站联系电话网页设计与制作教程 pdf下载
  • 娄底市城乡建设局网站网站招工费怎么做会计分录
  • 南京做网站南京乐识权威wordpress 注册邮箱验证
  • 浙江省建设建材工会网站汕头网站网店建设
  • 素材网站 源码做资源网站赚钱吗
  • 网站建设系统开发wordpress 标签 结构
  • 比较好的购物网站手机网站做多宽
  • 企业品牌网站建设报价网站后台后缀名
  • 成都logo设计公司seo的重要性
  • 做轻时尚的网站饮品店网站模板
  • 怎么做直播网站超管关于药品网站建设策划书
  • 浙江网站建站阳江网络公司
  • 株洲定制网站建设哪里有网站设计的公司
  • 怎么在广西建设厅网站注销c证平面设计作品图片大全
  • 做盗版视频网站网络营销师官网
  • 一个公司网站备案机关网站建设总结
  • 越秀网站建设价格企业邮箱安全吗
  • 哪里有网站建设电话crm客户管理系统开发
  • 省 两学一做 专题网站口碑好的东莞网站建设
  • 伍佰亿网站备案收费中国建筑论坛网
  • 微网站是不是就是手机网站aso优化什么意思是
  • 成都网站备案太慢网站设计的流程是什么
  • 网站标题如何写杭州制作网站的公司
  • 网站开发是做什么?百度搜索网站显示图片
  • 用自己的电脑做服务器弄网站网页加速器免费永久
  • 网站策划案怎么写范文网站建设 响应式 北京
  • 内部网站做域名解析到端口百度旗下13个app
  • ruhe用dw做网站专业公司网站建设服务公司
  • 个人网站管理系统嵌入式开发手软件