热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

spring事务_Spring事务

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Spring事务相关的知识,希望对你有一定的参考价值。1:事务的概念事务是

篇首语:本文由编程笔记#小编为大家整理,主要介绍了Spring事务相关的知识,希望对你有一定的参考价值。



1:事务的概念

事务是一系列作为一个逻辑单元来执行的操作集合

他是数据库维护数据一致性的单位,他将数据库从一个一致状态,转变为新的另外一个一致状态

说的简单一点就是:如果一组处理步骤要么全部成功,要么全部失败,这样就保证了 数据始终一个状态,维护了数据的完整和可靠

 

2:jdbc处理事务的逻辑:

详见jdbc事务.png

 

3:事务的属性:

事务的4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。

* 原子性(atomicity):一个事务是一个不可分割的工作单位,事务中包括的所有操作要么都做,要么都不做。

* 一致性(consistency):事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

* 隔离性(isolation):一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

* 持久性(durability):持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

 

4:事务的传播特性指不同事务的方法在相互调用时,执行期间事务的维护情况

一般有两种方式:

* PROPAGATION_REQUIED:如果存在一个事务,则支持当前事务,如果没有事务则开启

* PROPAGATION_REQUIED_NEW:总是开启一个新事务

 

5:事务管理的类型:

事务管理分为两种类型,分为编程式事务和声明式事务

编程式事务管理可以清楚的定义事务的边界

可以实现细粒度的事务控制,开发者可以通过程序代码来控制你的事务何时开始何时结束,类似于jdbc事务.png,但是事务的控制和业务代码耦合在一起,不能共用,开发效率低,不便于维护

声明式事务

声明式事务可以结合spring AOP的概念,只需要通过配置在指定的方法中加入事务控制

如果需要修改或者删除事务,移除配置即可,解除了系统服务(事务)与业务代码的耦合,而且方便管理,在实际开发中,一般提倡用声明式事务管理

 

6:spring跟事务的关系

* 事务原本是数据库中的概念,是在dao层,但是一般情况下,我们会把事务管理提升到我们的业务层(service),这是为了更好的用事务来管理我们的业务逻辑

* spring并不直接管理事务,而是提供了多种事务管理器,根据不同的数据应用方式,(jdbc(自定义封装的jdbc,jdbctemplate,mybatis)/hibernate)提供了对应的事务管理器,所有的事务管理器实现了一个共同的接口,org.springframework. transaction.PlatformTransactionManager,他提供了三个方法 commit rollback getTransaction(TransactionDefinition(用来定义事务的一系列属性))

 

7:Spring实现事务有三种方式

* 基于xml配置

* 注解

* aspectJ

 

8:模拟转账

 

9: spring基于xml配置实现事务

* 环境搭建:引入jar,引入aop约束

aopalliance-1.0.jar

spring-aop-4.2.1.RELEASE.jar

spring-tx.jar

* xml配置事务





 








ISOLATION_DEFAULT,PROPAGATION_REQUIRED




 

10: spring注解方式实现事务

在第九步的基础上引入tx约束



在方法上加上 @Transactional(isolation=Isolation.DEFAULT,propagation=Propagation.REQUIRED)

11: spring AspectJ实现事务
















 

 

 

 

 

 

 

 

 

推荐阅读
  • 本文详细介绍了Java反射机制的基本概念、获取Class对象的方法、反射的主要功能及其在实际开发中的应用。通过具体示例,帮助读者更好地理解和使用Java反射。 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文对比了杜甫《喜晴》的两种英文翻译版本:a. Pleased with Sunny Weather 和 b. Rejoicing in Clearing Weather。a 版由 alexcwlin 翻译并经 Adam Lam 编辑,b 版则由哈佛大学的宇文所安教授 (Prof. Stephen Owen) 翻译。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案
    深入剖析Java中SimpleDateFormat在多线程环境下的潜在风险与解决方案 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • JUC(三):深入解析AQS
    本文详细介绍了Java并发工具包中的核心类AQS(AbstractQueuedSynchronizer),包括其基本概念、数据结构、源码分析及核心方法的实现。 ... [详细]
  • IOS Run loop详解
    为什么80%的码农都做不了架构师?转自http:blog.csdn.netztp800201articledetails9240913感谢作者分享Objecti ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • Java高并发与多线程(二):线程的实现方式详解
    本文将深入探讨Java中线程的三种主要实现方式,包括继承Thread类、实现Runnable接口和实现Callable接口,并分析它们之间的异同及其应用场景。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • Silverlight 实战指南:深入解析用户提交数据的验证与捕获机制
    本文深入探讨了Silverlight中用户提交数据的验证与捕获机制,详细分析了四种主要的验证方法:基本异常处理、DataAnnotation注解、IDataErrorInfo客户端同步验证以及自定义验证策略。通过实例解析,帮助开发者更好地理解和应用这些机制,提升应用程序的数据处理能力和用户体验。 ... [详细]
  • Spring框架中枚举参数的正确使用方法与技巧
    本文详细阐述了在Spring Boot框架中正确使用枚举参数的方法与技巧,旨在帮助开发者更高效地掌握和应用枚举类型的数据传递,适合对Spring Boot感兴趣的读者深入学习。 ... [详细]
author-avatar
981378224_014f95
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有