• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

Spring事务管理简介

编程语言 Geekerstar 10个月前 (05-31) 501次浏览 已收录 0个评论 扫描二维码
文章目录[隐藏]

什么是事务

事务是正确执行一系列的操作(或动作),使得数据库从一种装填转换成另一种状态,且保证操作全部成功,或者全部失效。

事务原则是什么

事务必须俯冲ISO/IEC所制定的ACID原则

ACID原则的具体内容如下:

原子性(Atomicity):即不可分割性,事务要么全部被执行,要么就全部不执行。

一致性(Consiitency):事务的执行使得数据库从一种正确状态转换成另一种正确状态。

隔离性(Isolation):在事务正确提交之前,它可能的结果不应显示给任何其他事务。

持久性(Durability):事务正确提交后,其结果将永久保存在数据库中。

Java事务

Java事务的产生

程序操作数据库的需要,以java编写的程序或系统,实现ACID的操作。

Java事务实现

通过JDBC相应方法间接来实现对数据库的增、删、改、查,吧事务转移到Java程序代码中进行控制

确保事务要么全部执行成功,要么撤销不执行。

总结:java事务机制和原理就是操作确保数据库操作的ACID特性。

Java事务实现模式

Java事务的实现

通过Java代码来实现对数据库的事务性操作。

Java事务类型

JDBC事务:用Connection对象控制的手动模式和自动模式

JTA(Java Transacation API)事务:与实现无关,与协议无关的API

容器事务:应用服务器提供的,且大多是基于JTA完成(通常基于JNDI的,相当复杂的API实现)

三种事务的差异

JDBC事务:控制的局限性在一个数据库连接内,但是其使用简单。

JTA事务:功能强大,课跨越多个数据库或多DAO,使用比较复杂。

容器事务:主要指的是J2EE应用服务器提供的事务管理,局限于EJB应用使用。

Spring事务核心接口

Spring事务管理器

JDBC事务管理器(DataSource Transaction Manager)

本事务管理器通过调用java.sql.Connection来管理事务

Hibernate事务管理器(Hibernate Transaction Manager)

本管理器将事务管理的职责委托给org.hibernate.Transaction对象来管理事务,而后者是从Hibernate Session中取到的。

JPA事务管理器(Jpa Transaction Manager)

通过一个JPA实体管理工厂,(javax.persistence.EntityManagerFactory接口的任意实现)将与由工厂所产生的JPA EntityManager合作来构建事务。

JTA事务管理器(Jta Transaction Manager)

本管理器将事务管理的责任委托给javax.transaction.UserTransaction和javax.transaction.TransactionManager对象进行事务处理。

Spring事务属性

数据读取类型说明

脏读:事务没提交,提前读取。

不可重复读:两次读取的数据不一致。

幻读:事务不是独立执行时发生的一种非预期现象。

事务隔离级别

隔离级别定义了一个事务可能受到其他并发事务影响的程度。

隔离级别分为:

事务传播行为

当事务方法被另一个事务方法调用时,必须指定事务应该如何传播

Spring的七种传播行为

事务是否只读

利用数据库事务的“只读”属性,进行特定优化处理。

设置“只读”注意:事务的是否“只读”属性,不同的数据库厂商支持不同。

oracle的“readOnly”不起作用,不影响其增删改查

MySQL的“readOnly”为true,只能查,增删改则出异常

事务超时

事务超时就是事务的一个定时器,在特定时间内事务如果没有执行完毕,那么就会自动回滚,而不是一直等待其结束。

设计事务时注意:为了使应用程序很好的运行,事务不能运行太长的时间。因为事务可能涉及对后端数据库的锁定,所以长时间的事务会不必要的占用数据库资源。

事务回滚

默认情况下,事务只有遇到运行期异常时才会回滚,而在遇到检查异常时不会回滚。

自定义回滚策略:

– 声明事务在遇到特定的检查型异常时像遇到运行期异常那样回滚

– 声明事务遇到特定的异常不回滚,即使这些异常时运行期异常。

Spring事务状态

事务接口

– 通过事务管理器获取TransactionStatus实例

– 控制事务在回滚或提交的时候需要应用对应的事务状态

Spring事务接口


丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Spring事务管理简介
喜欢 (0)
[247507792@qq.com]
分享 (0)
Geekerstar
关于作者:
本站技术支持

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00