Spring事务

事务的ACID特性

原子性(Atomicity):在事务中的操作,要么都执行,要么都不执行!

一致性(Consistency):数据从一种状态,同时到达另一种状态。

持久性(Durability):数据一旦提交,对数据库的影响是永久的。

隔离性(Isolation):事务之间是相互独立存在的。

事务创建的原则:

  1. 事务尽可能简短:

因为启动事务之后,数据库管理系统需要保留大量资源来保证事务的ACID!

如果是多用户的系统,那么回严重影响系统的性能。

  1. 事务中访问的数据量小:

在并发情况下,执行事务,事务的访问量尽量小,各个线程之间对数据的争夺就越小。

  1. 查询时尽量不使用事务:

因为查询不会修改数据。

  1. 在事务处理过程中,尽量不要出现用户等待的情况!

如果等待时间过长,占用资源太久,有可能会造成系统阻塞!(可以设置事务的超时时间)

Spring事务的管理实现

01.使用spring的事务工厂

02.使用spring的注解    (常用)

03.使用aspectJ 的AOP配置         (常用)

Spring事务中两个属性

Isolation :事务的隔离级别

01. default :采用数据库默认的事务隔离级别

Mysql :repeatable-read (可重复读)

Oracle :read-committed(读提交)

02. repeatable-read(可重复读):解决了脏读和不可重复读,但是可能发生幻读。

03. read-committed(读提交);解决了脏读,但是没有解决不可重复读和幻读。

04. read-uncommitted(读未提交):什么问题都没解决,最垃圾

05. serializable (串行化):级别最高,效率最低,彻底解决并发的问题。

propagation: 事务的传播行为:一共7中方式!

01.required:是spring默认的事务传播行为!

指定的方法必须在事务中执行!如果没有事务,则会自动创建一个事务!

02.supports:有事务就在事务环境下执行,没有事务就直接执行!

03.mandatory:指定的方法必须在事务中执行!如果没有事务,则抛出异常!

04.requires_new:总是新创建一个事务!

如果当前方法存在事务,则把当前的事务挂起,直到新创建的事务执行完毕后执行!

05.not_supported:指定的方法不能在事务中执行!如果当前方法存在事务,则把当前的事务挂起!

06.never:指定的方法不能在事务中执行!如果当前方法存在事务,则抛出异常!

07.nested:指定的方法必须在事务内执行!

如果执行的方法没有事务,则会创建一个事务!

如果执行的方法没有事务,则会嵌套执行!

timeout_default:定义了事务默认的超时时间!

Spring事务管理的接口:PlatformTransactionManager

常用的两个实现类:

01.使用jdbc和MyBatis时     使用DataSourceTrancationManager

02.使用hibernate时              使用HibernateTrancationManager

Spring事务回滚的方式:

默认的回滚方式--》发生运行时异常回滚!发送受查异常时提交!

受查异常肯定需要我们手动的设置回滚方式!

运行时异常严重!一旦发生,JVM中止执行!

实现自定义异常类!RuntimeException -->  Exception --->  Throwable

Spring——事务的更多相关文章

  1. spring事务概念理解

    1.数据并发问题 脏读 A事务读取B事务尚未提交的更新数据,并在此数据的基础上操作.如果B事务回滚,则A事务读取的数据就是错误的.即读取了脏数据或者错误数据. 不可重复组 A事务先后读取了B事务提交[ ...

  2. 【Java EE 学习 52】【Spring学习第四天】【Spring与JDBC】【JdbcTemplate创建的三种方式】【Spring事务管理】【事务中使用dbutils则回滚失败!!!??】

    一.JDBC编程特点 静态代码+动态变量=JDBC编程. 静态代码:比如所有的数据库连接池 都实现了DataSource接口,都实现了Connection接口. 动态变量:用户名.密码.连接的数据库. ...

  3. Spring事务

    1.@Transactional 只能被应用到public方法上, 对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能.@Transactional 的 ...

  4. spring事务管理器设计思想(二)

    上文见<spring事务管理器设计思想(一)> 对于第二个问题,涉及到事务的传播级别,定义如下: PROPAGATION_REQUIRED-- 如果当前没有事务,就新建一个事务.这是最常见 ...

  5. spring事务管理器设计思想(一)

    在最近做的一个项目里面,涉及到多数据源的操作,比较特殊的是,这多个数据库的表结构完全相同,由于我们使用的ibatis框架作为持久化层,为了防止每一个数据源都配置一套规则,所以重新实现了数据源,根据线程 ...

  6. Spring事务管理的三种方式

    一 .第一种:全注解声明式事务 Xml代码 复制代码 收藏代码 .<?xml version="1.0" encoding="UTF-8"?> .& ...

  7. spring 事务传播特性 和隔离级别

    事务的几种传播特性1. PROPAGATION_REQUIRED: 如果存在一个事务,则支持当前事务.如果没有事务则开启2. PROPAGATION_SUPPORTS: 如果存在一个事务,支持当前事务 ...

  8. Spring事务管理

    Spring是SSH中的管理员,负责管理其它框架,协调各个部分的工作.今天一起学习一下Spring的事务管理.Spring的事务管理分为声明式跟编程式.声明式就是在Spring的配置文件中进行相关配置 ...

  9. Spring事务传播属性

    Spring 对事务控制的支持统一在 TransactionDefinition 类中描述,该类有以下几个重要的接口方法: int getPropagationBehavior():事务的传播行为 i ...

  10. Spring事务属性的介绍

    Spring声明式事务让我们从复杂的事务处理中得到解脱.使得我们再也无需要去处理获得连接.关闭连接.事务提交和回滚等这些操作.再也无需要我们在与事务相关的方法中处理大量的try-catch-final ...

随机推荐

  1. 关于python的正则表达式的例子

  2. Selenium+TestNG+Maven+Jenkins+SVN(转载)

    转载自:https://blog.csdn.net/u014202301/article/details/72354069 一. 创建Maven项目,下载Selenium和TestNG的依赖(依赖可以 ...

  3. Kubernetes的三种外部访问方式:NodePort、LoadBalancer和Ingress

    NodePort,LoadBalancer和Ingress之间的区别.它们都是将集群外部流量导入到集群内的方式,只是实现方式不同. ClusterIP ClusterIP服务是Kubernetes的默 ...

  4. CentOS 7 lnmp环境配置laravel项目的问题总结!

    一.最常见的几个问题 1.部署好站点后,访问站点的时候始终是“File Not Found”!(nginx中的路由配置问题) 2.除了根目录可以访问其它的访问全是403问题!(权限问题) 3.除了根目 ...

  5. docker容器composer 部署 laravel框架

    首先yum install docker     安装docker service docker start   启动docker docker pull  docker.io/skiychan/ng ...

  6. 监听端口,获取webService请求报文

    第一步下载我们的wsdl文件到本地 第二步建立一个测试webservice工程,把wsdl放在项目里面 第三步把测试webservice中的wsdlLocation改成localhost.....你的 ...

  7. Day3 -4.9!受到毕设的突然袭击,一脸蒙蔽,学习暂时停止,明晚继续

    PS:啊啊啊啊,慌张的不行,不详的预感终于爆发了,第二次毕设评图好突然,没办法了,竹径和学习突然搁置,明晚健身/建模/补更Day3,感到崩溃 ————————————————————————————— ...

  8. maven学习--1.项目结构及简单使用

    1.项目目录结构 MavenProjectRoot(项目根目录)   |----src   |     |----main   |     |         |----java ——存放项目的.ja ...

  9. mRNA文库构建

    mRNA文库构建 Posted: 三月 27, 2017  Under: Transcriptomics  By Kai  no Comments RNA-seq测序方法 在测mRNA过程中,首先要去 ...

  10. 服务管理之mysql基础

    目录 mysql基础 1. 关系型数据库介绍 1.1 数据结构模型 1.2 RDBMS专业名词 2. mysql安装与配置 2.1 mysql安装 2.2 mysql配置 3. mysql的程序组成 ...