`

事务相关的知识

 
阅读更多

事务的特性:

原子性:事务是不可分割的最小单元,事务里的操作要么都做要么都不做

隔离性:在并发程序中,并发事务之间互不影响,在对一个事务的操作不会对其他事务产生影响,事务的隔离性需要事务的隔离级别来完成。

一致性:在事务执行前后数据库的数据都处于正确的状态,

持久性:事务一旦执行成功,那么对数据库数据的改变是永久的,不会因为因为断点或者系统故障而发生数据丢失。

 

在实际项目开发中,事务一般都是并发执行的,事务并发执行一般会遇到以下问题:

丢失更新:两个事务先后更新同一行数据,后执行的事务的更新覆盖掉了前一个事务的更新,这样会导致前一个事务更新的数据丢失,这是由于没有加锁造成的。

脏读:一个事务看到了另一个事务未提交的更新的数据。

不可重复读:在同一事物中,多次读取同一条数据确返回不同的结果。因为有其他的事务更改了这些数据。

幻读:一个事务在执行过程中读取到了另一个事务已提交的插入数据,即第一个事务开始时读取到一批数据,此时另一个事务又插入数据并提交,然后第一个事务又读取这批数据单发现多了一条。

 

为了解决事务并发的问题,规定了四种隔离级别:

1.未提交读:最低的隔离级别,一个事务能够读取到别的事务未提交的更新数据,这很不安全,可能会导致丢失更新,脏读,不可重复读,幻读。

2.提交读:一个事务能读取到别的事务提交的更新数据,不能看到未提交的更新数据,这样避免了丢失更新,但是肯能会产生脏读、不可重复读、幻读。

3.可重复读:保证同一个事务中先后执行多次查询都返回同一个结果,不受其他事务的影响,解决了丢失更新、脏读、不可重复读的问题,但是可能产生幻读。

4.序列化:最高隔离级别,不允许事务并发执行,只能串行执行,避免了,丢失更新、脏读、不可重复读、幻读等问题。

 

spring中对事务的支持分为物理事物和逻辑事务。

物理事物就是底层数据库提供的事务支持,例如JDBC

逻辑事务是spring管理的事务,逻辑事务提供更丰富的控制,在spring中如果没有强调一般就是逻辑事务。

 

DefaultTransactionDefinition:事务定义,定义如隔离级别、传播行为,事务超时时间,事务是否只读等。

 

例如:

  1.  DefaultTransactionDefinition def = new DefaultTransactionDefinition();  
  2.     def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);  
  3.     def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); 

 

定义事务的隔离级别为提交读,传播行为为必须有事务,如果没有事务则创建一个事务。

TransactionStatus:表示事务的状态,获取事务状态后,spring根据事务的传播行为开启事务。

 

事务隔离级别

spring 中使用TransactionDefinition的静态变量来制定事务的隔离级别:

ISOLATION_DEFAULT:默认的隔离级别,使用底层的数据库的默认的隔离级别。

IOSLATION_READ_UNCOMMITED:未提交读

ISOLATION_READ_COMMITED:提交读

IOSLATION_REPEATABLE_READ:可重复读

IOSLATION_SERIALIZABLE:序列化

 

事务的传播行为:

事务的传播行为指定在多个事务方法间调用时,事务是如何在这些方法间传播的。

spring共支持7种事务传播行为:

1.reuqired:必须有事务,否则新建一个事务,使用PROPAGATION_REQUIRED指定。

2.requiresNew:表示每次都创建新的逻辑事务,使用PROPAGATION_REQUIRES_NEW指定。

3.Supports:支持当前事务,使用PROPAGATION_SUPPORTS指定,如果当前存在逻辑事务,就加入到该逻辑事务中,如果当前没有逻辑事务就以非逻辑事务的方式运行。

4.NotSupported:不支持事务,如果当前存在事务,则暂停该事物,以非事务的方式运行,使用PROPAGATION_NOT_SUPPORTED指定

5.Mandatory:使用当前事务执行,如果当前没有事务则抛出异常,用PROPAGATION_MANDATORY指定

6.NEVER:不支持事务,如果当前存在事务则抛出异常,使用PROGATION_NEVER指定。

7.NESTED:嵌套事务支持,如果当前存在事务,则在嵌套事务内执行,如果当前事务不存在,则创建新的事务。嵌套事务使用数据库中的保存点来执行,即嵌套事务回滚将不影响外部事务,外部事务回滚将导致嵌套事务回滚。

 

  1. <tx:advice id="txAdvice" transaction-manager="txManager">  
  2. <tx:attributes>  
  3.            <tx:method name="save*" propagation="REQUIRED" />  
  4.            <tx:method name="add*" propagation="REQUIRED" />  
  5.            <tx:method name="create*" propagation="REQUIRED" />  
  6.            <tx:method name="insert*" propagation="REQUIRED" />  
  7.            <tx:method name="update*" propagation="REQUIRED" />  
  8.            <tx:method name="merge*" propagation="REQUIRED" />  
  9.            <tx:method name="del*" propagation="REQUIRED" />  
  10.            <tx:method name="remove*" propagation="REQUIRED" />  
  11.            <tx:method name="put*" propagation="REQUIRED" />  
  12.            <tx:method name="get*" propagation="SUPPORTS" read-only="true" />  
  13.            <tx:method name="count*" propagation="SUPPORTS" read-only="true" />  
  14.           <tx:method name="find*" propagation="SUPPORTS" read-only="true" />  
  15.           <tx:method name="list*" propagation="SUPPORTS" read-only="true" />  
  16.           <tx:method name="*" propagation="SUPPORTS" read-only="true" />  
  17.        </tx:attributes>  
  18. </tx:advice>  

 

 

 注解式事务声明:

 

  @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED)

    @Override

    public void save(final UserModel user) {

        userDao.save(user);

        user.getAddress().setUserId(user.getId());

        addressService.save(user.getAddress());

        

    }

 

    @Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_COMMITTED, readOnly=true)

    @Override

    public int countAll() {

        return userDao.countAll();

    }

 

 

 

 

分享到:
评论

相关推荐

    财务会计及事务所管理知识分析范本.docx

    为了深入分析财务会计及事务所管理的知识,本文将依据一份名为“财务会计及事务所管理知识分析范本”的文件,对事务所的管理和运营方面的关键知识点进行详尽的探讨。 首先,文件中的“总则”部分设定了会计事务所...

    DRDS跨库事务文档

    以下是关于DRDS跨库事务文档的详细知识点。 ### 柔性事务 柔性事务是DRDS支持的一种事务模式,它实现了补偿型事务模型,其核心思想是将事务拆分为三个阶段:Try、Confirm和Cancel。 - **Try阶段**:尝试执行业务...

    JDBC事务管理的简单实现

    为了实现数据一致性,需要在代码中显示的调用Connection方法的事务相关API来完成工作。下面是关于JDBC事务管理的简单实现的知识点。 一、事务管理的必要性 在数据库编程中,事务管理是非常重要的一部分。它可以...

    spring 事务传播 demo

    下面我们将详细讨论相关知识点。 首先,事务传播行为是指当一个被@Transactional注解的方法被另一个@Transactional方法调用时,如何处理当前事务的边界。Spring定义了7种不同的事务传播行为: 1. **PROPAGATION_...

    asp.net 事务处理

    下面将详细探讨ASP.NET事务处理的相关知识点。 1. **事务的基本概念**:事务是一组逻辑操作,这些操作被视为一个单一的工作单元,只有当所有操作都成功时,事务才会提交;如果有任何操作失败,整个事务都将回滚,...

    A类B类C类嵌套事务问题相关类

    当我们谈论"A类B类C类嵌套事务问题相关类"时,这通常涉及到在Java编程环境中处理事务的一系列类或者方法。Java中的事务管理主要用于确保数据的一致性和完整性,即使在系统出现故障或异常情况下也是如此。 在Java中...

    C#中的事务处理,数据库编程中常用

    事务是数据库操作的一个逻辑单元,它包含一组相关的SQL语句,这些语句要么全部执行成功,要么全部回滚不执行。事务的四大特性,即ACID(原子性、一致性、隔离性和持久性),是数据库系统的核心原则。 1. **原子性...

    分布式事务源代码

    分布式事务主要涉及以下知识点: 1. **两阶段提交(2PC, Two-Phase Commit)**:这是最基础的分布式事务协议,包括准备阶段和提交阶段。在准备阶段,事务协调者询问所有参与者是否可以提交,参与者根据自身情况返回...

    上海市高新技术企业认定专项审计事务所名单终稿.pdf

    这个列表提供了上海市高新技术企业认定专项审计事务所的名称、序号和其他相关信息。 知识点一:高新技术企业认定 高新技术企业认定是指国家对高新技术企业的认定和评估,目的是为了鼓励和支持高新技术企业的发展。...

    教育精品资料面对知识产权法律服务市场律师事务所如何举措之分析.doc

    随着知识产权保护意识的强化和相关法规的完善,知识产权法律服务市场已经展现出巨大的增长潜力,成为法律服务市场中不可或缺的一部分。 在知识产权法律服务市场中,商标专利事务所和律师事务所分别扮演着各自的角色...

    微服务主题系统_分布式事务领域知识及常见解决方案

    4. Saga:长事务,将一个大事务分解为一系列小事务,每个小事务可以单独提交,如果有任何问题,通过回滚一系列相关的子事务来恢复。 5.补偿事务(Compensating Transaction):每个操作都有对应的补偿操作,如果...

    会计师事务所实习报告知识.pdf

    【会计师事务所实习报告知识】 实习报告主要涵盖了会计专业学生在...通过这次实习,学生不仅获得了实际工作经验,还加深了对财务管理、会计审计等相关专业知识的掌握,为未来的专业发展和职业生涯积累了宝贵的财富。

    Spring事务管理开发必备jar包

    本资源包提供了进行Spring事务管理开发所需的所有关键库,包括框架基础、核心组件、AOP(面向切面编程)支持、日志处理、编译工具以及与数据库交互的相关jar包。下面将对这些知识点进行详细解释: 1. **Spring框架*...

    易语言学习进阶事务处理

    本压缩包文件"易语言学习进阶事务处理"是针对易语言使用者提供的一份进阶学习资料,主要涵盖了事务处理的相关知识。 事务处理在计算机科学中是指在数据库管理系统中执行的一系列操作,这些操作被视为一个单一的工作...

    spring-tx事务管理实例

    事务超时可以防止长时间运行的事务阻塞系统资源,而懒加载则是在事务真正需要时才初始化相关对象,以提高系统效率。 总的来说,Spring事务管理通过其强大的声明式事务处理能力和对各种事务策略的支持,使得开发者...

    若依框架分布式事务配置和项目启动手册

    - 配置事务管理器:在application.yml或application.properties中设置事务管理器的相关参数,如地址、端口、服务名等。 - 开启事务注解:在需要事务控制的Service或Controller层方法上添加@Transactional注解。 4...

    分布式事务.zip

    下面将详细探讨Spring Cloud集成TX-LCN分布式事务的关键知识点。 首先,理解分布式事务的背景和意义。在分布式系统中,由于多个服务间的交互,确保数据一致性成为挑战。ACID(原子性、一致性、隔离性、持久性)原则...

Global site tag (gtag.js) - Google Analytics