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. ActiveMQ安装使用与spring整合配置教程

    https://blog.csdn.net/qq_22075041/article/details/77602996

  2. sql优化之concat/concat_ws/group_concat

    原文1:https://baijiahao.baidu.com/s?id=1595349117525189591&wfr=spider&for=pc 原文2:https://www.y ...

  3. Django Cache缓存系统学习--数据库缓存

    Django是动态网站,用户每一次请求页面,服务器都会执行以下操作:数据库查询.渲染模版.执行业务逻辑,最后生成用户可查看的页面.当访问量比较大的时候,会消耗掉大量的资源,这时候就会考虑到缓存问题. ...

  4. spring boot + apache camel 传输文件

    一 sftp搭建略 这里简单说一下为什么使用sftp.ftp和sftp各有优点,差别并不是太大.sftp安全性好,性能比ftp低.ftp对于java来说并不复杂,效率也高.之所以使用sftp主要是可以 ...

  5. pandas中的时间序列基础

    重要的数据形式时间序列 datetime以毫秒形式存储日期和时间 now = datetime.now() now datetime.datetime(2018, 12, 18, 14, 18, 27 ...

  6. tomcat启动慢

     securerandom.source=file:/dev/./urandom  搜索  /""

  7. python 从大到小排序

    a = [3,7,4,9]a = sorted(a,reverse=True)print(a)#[9, 7, 4, 3]

  8. c#线程池中的异常

    static void Main(string[] args) { //写日志 //使用线程池 ; i < ; i++) { ThreadPool.QueueUserWorkItem(new W ...

  9. 19-matlab知识点复习二

    %% function RandDisplayJiong axis off; %关闭坐标轴 %Menubar是菜单条 none就是不显示图上方的菜单条 set(gcf,'menubar','none' ...

  10. JavaSE基础知识(5)—面向对象(5.4面向对象三大特征:封装、继承、多态)

    面向对象编程具有三大特征: 封装 继承 多态 一.封装 1.好处 狭义的封装:也就是属性的封装,避免了任意赋值的危险,提高了数据的安全性! ①隐藏一个类中不需要对外提供的实现细节 ②使用者只能通过实现 ...