首页 > 其他分享 >Spring 框架的事务管理

Spring 框架的事务管理

时间:2023-03-31 20:25:47浏览次数:42  
标签:事务管理 事务 框架 只读 Spring 回滚 属性

1、事务的概念

  事务是一个不可分隔的工作单元,其中的 SQL 语句要么全都执行,要么全都不执行,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。在企业级应用程序开发中,事务管理是必不可少的技术,用来确保数据的完整性和一致性。 事务的四个特性:ACID    原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用;    一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏;    隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏;    持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。   2、Spring 中的事务管理 Spring 事务采用 AOP 的方式实现,包括三个要素:  DataSource:事务的真正处理者,如 MySQL 等;  TransactionManager:管理事务的处理过程,如打开、提交、回滚;  事务应用和属性配置:作为一个标识符表明哪些方法要参与事务,一些配置: 隔离级别、超时时间等。 具体核心接口包括:  事务管理器:如针对 JDBC 的 DataSourceTransactionManager;  事务属性定义:配置事务的一些基本属性,描述了事务策略如何应用到方法上,接口定义如下,具体包括以下属性: public interface TransactionDefinition { int getPropagationBehavior(); // 返回事务的传播行为 int getIsolationLevel(); // 返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据 int getTimeout(); // 返回事务必须在多少秒内完成 boolean isReadOnly(); // 事务是否只读,事务管理器能够根据这个返回值进行优化,确保事务是只读的 }

 

(1)传播行为属性

 

(2)隔离级别属性

 

(3)只读属性

  数据库可以利用事务的只读特性来进行一些特定的优化。通过将事务设置为只读,就可以给数据库一个机会,让它应用它认为合适的优化措施。   (4)事务超时属性   为了使应用程序很好地运行,事务不能运行太长的时间。因为事务可能涉及对后端数据库的锁定,所以长时间的事务会不必要的占用数据库资源。事务超时就是事务的一个定时器,在特定时间内事务如果没有执行完毕,那么就会自动回滚,而不是一直等待其结束。   (5)回滚规则   回滚规则定义了哪些异常可以导致事务回滚,而哪些不行。

标签:事务管理,事务,框架,只读,Spring,回滚,属性
From: https://www.cnblogs.com/qiqi-yi/p/17277381.html

相关文章

  • SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)
    SpringBoot打包成exe(别再用exe4j了,使用JDK自带工具)搜到大部分打包exe的文章都是使用exe4j打包步骤贼多,安装麻烦,打包麻烦收费软件,公司使用会吃律师函JDK14以上可以使用JDK自带的jpackage打包JDK自带,一行命令搞定生成的程序包括java环境,用户不需要安装java实测环境......
  • SpringBoot 介绍
    1、定义SpringBoot是由Pivotal团队在2013年开始研发,2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置,简化了Spring项目的初始搭建和开发过程。Boot是启动的意思,SpringBoot本......
  • 博客系统——VBLOG_项目工程框架搭建
    VBLOG_项目工程框架搭建一、架构设计采用前后端分离架构设计:api:后端接口服务golang开发的restful接口使用mysql做数据存储web:vue3前端框架前端框架:vue3,vue-routerui组件:arco.design(头条开源组件库)二、接口设计2.1、管理员2.1.1、文章上传接口......
  • scrapy爬虫框架(三)Spider的使用
      在前面已经简单介绍了spider的基础用法,那么今天我们来详细了解一下Spider的具体用法。一、Spider的运行流程  spider是scrapy框架中最核心的组件,其定义了爬取网站的逻辑和解析方式,而spider主要做两件事情:定义爬取网站的动作。分析爬取下来的网页。  那么他的运行流......
  • SpringBoot下动态数据源
    第一种:Mybatis-Plus的dynamic-datasourceGitee地址:https://gitee.com/baomidou/dynamic-datasource-spring-boot-starter要实现其实很简单,一个注解就可以了1、创建两个一库,一样的表进行测试2、搭建SpringBoot引入dynamic-datasource依赖<dependency><groupId>com.baomidou......
  • SpringBoot微服务集成keycloak实现跨平台统一认证授权
    //项目架构微服务划分://auth认证微服务实现登录认证拦截,获取token//gateway网关微服务//user用户微服务用户权限管理//system系统微服务核心逻辑处理//xxx其他微服务//common模块//1、common模块引入keycloak认证相关依赖<properties><keyc......
  • uni-app框架
    1.uni-app简介uni-app 是一个使用vue的语法+微信小程序的标签和API的跨平台前端框架,开发者编写一套代码,可编译到iOS、Android、H5、小程序等多个平台,几乎覆盖所有流量端,uni-app具有跨端数量更多、性能体验更优秀、学习成本低、开发成本低等几大关键优势。2.使用uni-app的......
  • SpringBoot中常见的各种初始化场景分析
    大家能区分出以下各种初始化适用的场景吗ApplicationRunner,CommandLineRunner,BeanFactoryPostProcessor,InitializingBean,BeanPostProcessor首先可以简单分类Springboot的钩子        1,ApplicationRunner        2,CommandLineRunner上述2个钩子其实没啥......
  • SpringBoot 使用RedisTemplate
    1.导入Maven依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>2.配置连接信息spring:redis:host:127.0.0.1......
  • MyBatis 框架的多表查询的实现
    1、表与表的联系类型一对一(1:1)一对多(1:n或n:1)多对多(n:m)2、Mybatis中实现多表查询的重要标签resultMap在Mybatis框架中,resultMap标签可以表示两个表之间的一对多和一对一关系。如:一个系可以有多个学生,如果想查询每个系的学生信息时,可以在Depar......