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. CentOS7搭建Zookeeper环境

    Linux下安装JDK 1.检查一下系统中的jdk版本 [root@localhost software]# java -version 显示: openjdk version "1.8.0 ...

  2. 后台商品搜索功能开发SQL

    在做后台的商品搜索功能开发时遇到了一些问题记录下来 版本一 <select id="SelectByNameAndParentId resultMap="Base_resul ...

  3. 【noip模拟赛4】Matrix67的派对 暴力dfs

    [noip模拟赛4]Matrix67的派对   描述 Matrix67发现身高接近的人似乎更合得来.Matrix67举办的派对共有N(1<=N<=10)个人参加,Matrix67需要把他们 ...

  4. 记录一次程序输出和DB查询不匹配的问题

    今天发生一件很神奇的事情,我用TP读取DB数据,然后打印出来的数据,和直接通过sequal pro查询出来的数据(某一列),怎么对都对不起来,我尝试 清空TP缓存 MYSQL服务重启 mac重启 都无 ...

  5. listview的gridview视图中,获取列中模板内的button按钮(找控件内的控件)

    点击“间隙”,获取“间隙”旁边隐藏的减号按钮(本图片未显示出来) private void TextBlock_MouseDown_2(object sender, MouseButtonEventA ...

  6. vue父子组件实现v-model

    话不多说,直接上代码 <div id="app"> <price-input v-bind:value="price" v-on:input= ...

  7. 避免切换横竖屏Fragment的重复加载导致UI混乱

    当我们切换横竖屏时 Activity的生命周期就会重走一遍,自然 其中的Fragment的生命周期也就重新走了一遍,实践证明 当熄屏 再开屏时 Fragment的生命周期也会重走一遍 解决方案: an ...

  8. Cannot attach medium 'D:\program\VirtualBox\VBoxGuestAdditions.iso' {}: medium is already associated with the current state of machine uuid {}返回 代码: VBOX_E_OBJECT_IN_USE (0x80BB000C)

    详细的错误信息如下: Cannot attach medium 'D:\program\VirtualBox\VBoxGuestAdditions.iso' {83b35b10-8fa2-4b81-8 ...

  9. 有关ajax的理解;

    jQuery是JavaScript封装的一个库,里面封装了一些便于我们使用的方法,同时还有$.ajax()的一些理解需要我们更加深入了解 ajax简介: 实现后台与前台交互的功能或方法就叫做ajax: ...

  10. Devexpress使用之:GridControl控件

    Devexpress使用之:GridControl控件 Devexpress系列控件功能很强大,使用起来也不太容易,我也是边摸索边使用,如果有时间我会把常用控件的使用方法整理出来的. using Sy ...