热门标签 | 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实现事务
















 

 

 

 

 

 

 

 

 

推荐阅读
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 开发笔记:spring boot项目打成war包部署到服务器的步骤与注意事项
    本文介绍了将spring boot项目打成war包并部署到服务器的步骤与注意事项。通过本文的学习,读者可以了解到如何将spring boot项目打包成war包,并成功地部署到服务器上。 ... [详细]
  • node.jsrequire和ES6导入导出的区别原 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用Express App提供静态文件,同时提到了一些不需要使用的文件,如package.json和/.ssh/known_hosts,并解释了为什么app.get('*')无法捕获所有请求以及为什么app.use(express.static(__dirname))可能会提供不需要的文件。 ... [详细]
  • 本文介绍了Sencha Touch的学习使用心得,主要包括搭建项目框架的过程。作者强调了使用MVC模式的重要性,并提供了一个干净的引用示例。文章还介绍了Index.html页面的作用,以及如何通过链接样式表来改变全局风格。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 本文介绍了解决mysql 5.1启动问题的方法,通过修改my.ini文件中的相关配置,包括innodb_data_home_dir和skip-innodb等,可以解决启动问题。同时还介绍了如何调整内存池来存储metadata信息。 ... [详细]
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社区 版权所有