`
eclipseakwolf
  • 浏览: 6808 次
  • 性别: Icon_minigender_1
  • 来自: 琼海
社区版块
存档分类
最新评论

事务学习笔记

    博客分类:
  • java
阅读更多
1、事务的4个属性
(1)Atomic原子性
(2)Consistent一致性
(3)Isolation隔离性
(4)Duration持久性

2、3种事务会出现的问题
(1)dirty read 脏读
如:A事务开始执行,并修改了资源数据,A事务未提交B事务读取A事务修改后的值,A事务可能回滚。(即:一个事务读取另一个未提交事务的数据)
(2)norepeatable-read 不可重复读
如:A事务读取数据后,中间B事务插队进来对数据进行操作(更新)并提交,当A事务在读取数据时,两次读取数据不同(不可重复读主要指更新)
(3)Phantom read幻读
如:A事务读取数据后,中间B事务插队进来对数据进行操作(删除或插入)并提交,当A事务在读取数据时,两次读取数据不同(幻象读主要指删除或插入)

3、java API Connection 五个事务级别
(1)TRANSACTION_NONE 不支持事务级别,可以不在考虑的范围之内
(2)TRANSACTION_READ_UNCOMMITTED 即在一个事务没有提交另一个事务可以进行操作,脏读,不可重复读,幻象读都可以发生。
(3)TRANSACTION_READ_COMMITTED 在一个事务提交后,另一个事务可以操作,可避免脏读
(4)TREANSACTION_REPEATABLE_READ 可重复读,可以避免脏读,不可重复读(ps:这里原理还不太清楚,知道的大侠多多拍砖)
(5)TRANSACTION_SERIALIZABLE 事务序列化,事务串行执行,可以避免上述所有事务问题,但效率差,这是必须的吗,并发性降低了

4、Hibernate对事物的处理
a.在并发性和数据处理之间的一个平衡点,一般是将事物级别设置为hibernate.connection.isolation=2,即TRANSACTION_READ_COMMITTED可以防止脏读。
b.悲观锁,在读取出来的时候加上一把锁,load(String entityName, Serializable id, LockOptions lockOptions),把LockOptions设置为LockOptions.UPGRADE
c.乐观锁,通过数据库的冗余来达到高并发,在数据库中设置一个版本字段,也即是在持久化的pojo对象中增加一个版本属性 version并用@Version 进行注解,只要一个事务对数据进行更新操作版本字段就会改变+1,这样另A个事务开始时读取的版本号与事务提交时的读入版本号不同,则说明其他事务应经动过改数据,就会抛出StaleObjectStateException,那么现在就好办了,捕获异常并进行处理就ok了

5、事务的传播行为
如:方法A--->methodA(),调用方法B---->methodB()
(1)TransactionAttributeType.REQUIRED 大概就是被调用的方法一定会在一个事务范围中运行
methodA()methodB()
在一个事务中直接处于methodA()事务范围中进行运行
不在在一个事务中则为methodB启动一个新的事务

(2)TransactionAttributeType.REQUIRED_NEW 大概就是被调用的方法一定会在一个新的事务范围中运行
methodA()methodB()
在一个事务中a.挂起methodA当前事务b.为methodB()启动一个新的事务c.执行methodB()方法d.执行完methodB()之后恢复methodA()事务
不在在一个事务中则为methodB启动一个新的事务

(3)TransactionAttributeType.MANDATORY 大概就是被调用的方法一定会在一调用的事务范围中运行(ps:mandatory 强制的 )
methodA()methodB()
在一个事务中直接处于methodA()事务范围中进行运行
不在在一个事务中抛出TransactionRequiredException

(4)TransactionAttributeType.NOT_SUPPORTED 大概就是被调用的方法一定不会有事务范围中运行
methodA()methodB()
在一个事务中a.挂起methodA当前事务b.执行methodB()c.执行完methodB()之后恢复methodA()事务
不在在一个事务中执行methodB()

(5)TransactionAttributeType.SUPPORTS 大概就是被调用的方法可以在有事务范围或无事务范围中运行(有点嫁鸡随鸡,嫁狗随狗的感觉)
methodA()methodB()
在一个事务中在methodA()事务范围中执行
不在在一个事务中执行methodB()

(6)TransactionAttributeType.NEVER大概就是被调用的方法可一定要在事务范围中运行
methodA()methodB()
在一个事务中抛出RemoteException
不在在一个事务中执行methodB()


6、EJB的事务管理
(1)CMT-->Container Manage Transaction 由容器完成事务的处理
(2)BMt --->Bean Manage Transaction 开发者通过代码完成事务的处理


参考:经典JAVA EE企业应用实战
分享到:
评论

相关推荐

    分布式事务学习笔记

    ### 分布式事务学习笔记知识点详解 #### 一、什么是分布式事务 分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。简单来说,一次大的操作由不同...

    数据仓库学习笔记

    "数据仓库学习笔记" 数据仓库学习笔记是研究数据仓库的笔记,旨在探索数据仓库的发展和演化过程。数据仓库学习笔记第 1 章讲述了决策支持系统的发展历史和演化过程。 数据仓库学习笔记中提到,决策支持系统(DSS)...

    Redis学习笔记整理

    四、 redis学习笔记之事务 16 五、 redis学习笔记之pipeline 20 六、 redis学习笔记之发布订阅 23 七、 redis学习笔记之持久化 28 八、 redis学习笔记之主从复制 30 九、 redis学习笔记之虚拟内存 31

    PCTP个人学习笔记—TiDB数据库事务设计

    PCTP个人学习笔记—TiDB数据库事务设计

    spring hibernate 事务管理学习笔记(二)

    在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...

    spring hibernate 事务管理学习笔记(一)

    在学习过程中,阅读博客如《spring hibernate 事务管理学习笔记(一)》是非常有益的,它通常会包含具体的示例代码和实践建议。你可以参考这个博客链接(https://microjava.iteye.com/blog/525973),结合实际项目,...

    学习笔记 学习笔记 学习笔记 学习笔记 学习笔记 学习笔记 学习笔记 学习笔记

    【标题】: "DWS学习笔记" 【描述】: "DWS(Data Warehouse System,数据仓库系统)是用于企业数据分析的重要工具,它整合了来自不同业务系统的数据,为决策支持提供高效、一致的信息。这份学习笔记主要涵盖了DWS的...

    笔记本学习笔记

    学习笔记可能涵盖事务的ACID属性(原子性、一致性、隔离性和持久性)以及事务的提交、回滚和保存点。 2. **SQLPlus**:20120325_oracle琛ㄧ殑杩炴帴鏂瑰紡銆乻qlplus.rar和20120326_oracle_sqlplus_DML.zip可能包含...

    j2ee学习笔记-j2ee学习笔记

    **J2EE学习笔记概述** J2EE(Java 2 Platform, Enterprise Edition)是一个由Sun Microsystems(现已被Oracle收购)开发的平台,主要用于构建企业级的分布式应用系统。它提供了服务器端组件模型、服务和API,支持...

    Spring框架学习笔记

    这份"Spring框架学习笔记"涵盖了Spring框架的基础知识、核心组件以及高级特性,对于初学者来说是一份宝贵的资料。 一、Spring框架概述 Spring框架是为了解决企业应用开发的复杂性而设计的,它提供了一个全面的基础...

    Oracle学习笔记精华版

    Oracle学习笔记精华版是针对数据库管理系统Oracle的一份重要学习资源,涵盖了从基础概念到高级特性的全面知识。Oracle,作为全球广泛使用的大型企业级数据库系统,对于IT专业人员尤其是数据库管理员(DBA)来说,是...

    Spring.NET学习笔记16——事务管理Demo源码

    在本篇“Spring.NET学习笔记16——事务管理Demo源码”中,我们将深入探讨Spring.NET的事务管理机制及其实际应用。 事务管理是软件开发中的关键部分,它确保数据库操作的一致性和完整性。Spring.NET通过其事务管理...

    c++完美学习笔记c++完美学习笔记c++完美学习笔记

    本资源摘要信息涵盖了C++语言的学习笔记,涵盖了C++的基本语法、数据类型、运算符、控制结构、函数、数组、指针、类和对象、继承、多态、异常处理等方面的知识点,并且涉及到了LoadRunner中的集合点、事务、参数化...

    Oracle学习笔记(事务知识点)

    Oracle学习笔记(事务知识点),事务处理:所谓的事务处理其实就是保证数据操作的完整性,所有的操作要么同时成功,要么同时失败

    JDBC学习笔记--JDBC学习笔记

    JDBC学习笔记 JDBC(Java DataBase Connectivity)是一种Java程序语言访问数据库的标准接口。它使得Java程序可以连接到各种不同的数据库管理系统,例如Oracle、SQL Server、MySQL、DB2、Sybase等。 JDBC的概念 ...

    MyBatis学习笔记1

    【标题】"MyBatis学习笔记1" 涉及的知识点主要集中在MyBatis这一流行的持久层框架上。MyBatis是一个优秀的Java ORM(对象关系映射)框架,它允许开发者将SQL查询与Java代码分离,使得数据库操作更加灵活且易于维护。...

    Hibernate学习笔记整理

    Hibernate学习笔记整理 以下是 Hibernate 框架的详细知识点: Hibernate 介绍 Hibernate 是一个 ORM(Object-Relational Mapping)框架,用于将 Java 对象映射到数据库表中。它提供了一个简洁的方式来访问和操作...

    SSH学习笔记3 SSH学习笔记3

    SSH学习笔记3主要聚焦于三个Java企业级开发框架——STRUTS、SPRING和HIBERNATE的集成与应用。这三个框架是Java后端开发中非常重要的组件,它们各自负责不同的层面,共同构建了一个强大的MVC(Model-View-Controller...

    spring学习笔记事务的

    ### Spring框架中的事务管理 #### 一、Spring事务概述 在Spring框架中,事务管理是一项重要的功能,它能够确保业务操作的一致性和完整性。Spring提供了两种类型的事务管理:编程式事务管理和声明式事务管理。 - *...

    SpringBoot经典学习笔记_springboot_SpringBoot经典学习笔记_

    SpringBoot经典学习笔记是针对Java开发者的宝贵资源,它涵盖了SpringBoot的核心概念、特性以及实践应用。SpringBoot是由Pivotal团队开发的框架,旨在简化Spring应用的初始搭建以及开发过程,通过“约定优于配置”的...

Global site tag (gtag.js) - Google Analytics