当前位置: 首页 > news >正文

java spring 事务控制器_spring之事务总结

事务定义

事务(transaction),一般是指要做的或者所做的事情。在程序中,尤其是在操作数据库的程序中,指的是访问并且可能更新数据库中数据项的一个执行单元(unit),这个执行单元由事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作组成。

事务特性(ACID原则)【记住】

事务具有4个基本特性:原子性、一致性、隔离性、持久性。也就是我们常说的ACID原则。

原子性(Atomicity):一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做。

一致性(Consistency):事务必须是使得数据库状态从一个一致性状态,转变到另外一个一致性状态。也就是说在事务前,和事务后,被操作的目标资源状态一致。比如银行转账案例中,转账前和转账后,总账不变。

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

持久性(Durability):一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响。

spring事务控制中需要明确的事项

第一件事

j2EE体系中项目按照分层进行设计开发,有表现层、业务层、持久层。事务处理位于业务层。spring提供了分层设计业务层的事务处理解决方案。

1bef8c4b7e047bb249dd2038d1df6a9d.png

第二件事

spring框架为我们提供了一组事务控制接口,该组接口位于spring-tx-xxx.RELEASE.jar包中

第三件事

spring的事务都是基于AOP的实现,它既可以使用编程的方式实现,也可以使用配置的方式实现。我们这里重点是使用配置的方式来实现。

spring事务控制器的API介绍

1.PlatformTransactionManager

2.TransactionDefinition

事务隔离级别 【理解】

说明:事务隔离级别,反应了事务在并发访问时的处理态度。

ISOLATION_DEFAULT:

默认级别,归属于下列某一种隔离级别。在项目中使用默认值即可。

ISOLATION_READ_UNCOMMITTED:

可以读取其他事务未提交的数据(脏读)

ISOLATION_READ_COMMITTED:

只读取其他事务已经提交的数据,解决脏读的问题。有可能两次读取不一致的问题,不可重复读(oracle数据库默认级别)

ISOLATION_REPEATABLE_READ:

是否读取其他事务提交修改后的数据,解决不可重复读的问题。保证两次读取一致,可重复读(mysql数据库默认级别)

ISOLATION_SERIALIZABLE:

是否读取其他事务添加后的数据,解决幻影读的问题

细节:

1.事务级别从低到高:脏读->不可重复读->可重复读->解决幻读

2.事务级别越高,数据越安全,消耗的资源越多,数据库操作性能越低

3.在企业项目中,使用哪一种级别的事务,需要根据业务需求来确定

事务传播行为【理解】

说明:事务传播行为,决定在不同的执行环境中,事务该如何传递。

REQUIRED:

如果已经有事务,就加入该事务中执行;如果没有事务,则新建一个事务。对应增/删/改操作(默认值)

SUPPORTS:

如果已经有事务,支持当前事务的执行;如果没有事务,就以非事务的方式执行。对应查询操作

MANDATORY:

要求在事务环境下执行,如果当前没有事务,则抛出异常

REQUIRES_NEW:

新建事务,如果当前已经存在事务,则把当前事务挂起

NOT_SUPPORTED:

以非事务方式执行,如果当前有事务,则把当前事务挂起

NEVER:

以非事务方式执行,如果当前有事务,则抛出异常

NESTED:

如果当前已经有事务,嵌套在当前事务中执行;如果当前没有事务,则类似于REQUIRED操作

事务的传播行为

public class transactionPropragation{

public void m1(){// 该方法没有事务

}

public void m2(){// 该方法有事务

// m2中调用m1()

m1();// 请求m1有没有事务???

}

public void m3(){// 没有事务

// m3调用m1

m1();

}

}

4.5.TransactionStatus

存储点:

存储过程结构:

create or replace procuder pro

is

begin

save1:

// 记录用户操作日志

save2:

// 操作商品表

save3:

// 操作订单表

save4:

// 操作支付表

end;

事务超时时间

以秒为单位进行设置。如果设置为-1(默认值),表示没有超时限制。在企业项目中使用默认值即可。

是否只读事务

只读事务比读写事务性能要高,实际项目中,查询一般建议设置为只读。

TransactionStatus

它是一个接口,提供了事务具体的执行状态,描述了某一个时间点上事务对象的状态信息。

相关文章:

  • java adt怎么使用_Java ADT中如何使用ImageView控件
  • java setforeground_java 中的JProgressBar设置前景色foreground无效果
  • python数字加密货币_GitHub - cugbliwei/cryptocurrency: 数字加密货币项目
  • java实现Tomasulo算法_并行计算机组成与设计pdf
  • java实时数据画图_Java中的实时绘图
  • java连接sql server数据库步骤_JDBC连接sql server数据库的详细步骤和代码 转
  • Java怎么保证数据一致性_连续调用多个外部系统写接口保证数据一致性的思路...
  • js多层对象数组 合并_js 将多个对象合并成一个对象 assign方法的实现
  • Linux mysql导入 表没有退出_Linux中mysql表的导出导入
  • mysql 5.7.17 jdk要求_Centos 7配置JDK1.8+MySQL5.7+Tomcat 8 开发环境
  • JAVA的error访问不存在_调用WxMpService的临时素材下载方法无效,提示错误代码:99999,文件名不存在...
  • mysql user表误删除_mysql user表root 用户误删除解决方法
  • top筛选java输出到文件_linux – 将时间戳添加到“top”命令输出
  • java城市级联代码_java json 省市级联实例代码
  • java写post 服务端_curl post请求java服务端提供的接口
  • Angular 响应式表单之下拉框
  • angular2开源库收集
  • CSS3 变换
  • express.js的介绍及使用
  • happypack两次报错的问题
  • IDEA常用插件整理
  • JavaScript 奇技淫巧
  • Java超时控制的实现
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • JS正则表达式精简教程(JavaScript RegExp 对象)
  • k8s如何管理Pod
  • MYSQL 的 IF 函数
  • vue-loader 源码解析系列之 selector
  • Web标准制定过程
  • 回流、重绘及其优化
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 延迟脚本的方式
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 正则表达式小结
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ​一帧图像的Android之旅 :应用的首个绘制请求
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #我与Java虚拟机的故事#连载08:书读百遍其义自见
  • (14)Hive调优——合并小文件
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (第二周)效能测试
  • (分布式缓存)Redis分片集群
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理 第13章 项目资源管理(七)
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • ***监测系统的构建(chkrootkit )
  • *上位机的定义
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .md即markdown文件的基本常用编写语法