什么是事务?

在软件领域,我们将一组要么全部执行要么全不执行的操作叫做事物。

事务的四个特性(ACID)
原子性(atomicity):原子性确保了事物中的操作像原子操作一样要就全部执行或全不执行,如果有一个操作失败,事务回滚。
一致性(consistency):数据在执行操作前后保持一致。
隔离性(isolation):但多个用户同时操作相同的数据时,事务保证它们互不影响。
持久性(durability):事物一旦完成,数据的结果会持久存在,一般是存储在数据库或其他持久化存储中。

事务管理器
spring并不直接管理事务,它提供了多种事务管理器。它们将事务管理的职责委托给像JTA或其他一些持久化框架。
它提供了PlatformTransactionManager这个事务管理器接口,其他持久化框架可以实现接口

Public interface PlatformTransactionManager(){  TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; Void commit(TransactionStatus status) throws TransactionException;  Void rollback(TransactionStatus status) throws TransactionException;  }

一些持久化平台的实现
jdbc: DataSourcetransactionmanager
Hibernate:Hibernatetransactionmanager
JPA:Jpatransactionmanager
JTA:Jtatransactionmanager

事务的五方面属性

传播行为

PROPAGATION_REQUIRED 支持当前事务,如果不存在 就新建一个(默认)(常用)
PROPAGATION_SUPPORTS 支持当前事务,如果不存在,就不使用事务
PROPAGATION_MANDATORY 支持当前事务,如果不存在,抛出异常
PROPAGATION_REQUIRES_NEW 如果有事务存在,挂起当前事务,创建一个新的事务(常用)
PROPAGATION_NOT_SUPPORTED 以非事务方式运行,如果有事务存在,挂起当前事务
PROPAGATION_NEVER 以非事务方式运行,如果有事务存在,抛出异常
PROPAGATION_NESTED 如果当前事务存在,则嵌套事务执行

隔离级别
可以理解为一个事务受到其他并发事务影响程度

首先并发过程中可能出现的问题
脏读:一个事务读取了另一个事务改写还未提交的数据,此时这次改写被回滚了,那么第一个事务读取的数据就没有意义,这就是脏读。
不可重复读:一个事务两次或以上读取同一个数据,得到不同结果,因为另一个事务在此时修改了数据。
幻读:一个事务读取了几行数据,此时另一个事物插入了一些数据,在之后第一个事务就会发现多了几行不存在的数据

ISOLATION_DEFAULT:使用数据库默认的事务隔离级别. (ISOLATION_REPEATABLE_READ)
ISOLATION_READ_UNCOMMITTED:此时脏读,不可重复读,幻读都可能发生。
ISOLATION_READ_COMMITTED:不可重复读,幻读可能发生。
ISOLATION_REPEATABLE_READ:幻读可能发生
ISOLATION_SERIALIZABLE:避免所有问题,最高级别,但是一般用锁定事务相关数据库表的方式实现,所以会导致性能很慢

只读
这是声明式事务的第三个属性,如果事务只对后端的数据库进行读操作,数据库可以利用事务的只读特性来进行一些特定的优化。通过将事务设置为只读,你就可以给数据库一个机会,让它应用它认为合适的优化措施。

事务超时
避免事务运行太长时间,因为事务会占用数据库资源,你可以设置一个特定的秒数,如果时间到了还没有执行完,事务就会回滚。

回滚规则
你可以定义事务在遇到哪些异常时回滚,遇到哪些异常时不会滚,默认运行期异常回滚。

在xml中声明一个事务
首先要导入tx这个包,它还会依赖spring的aop一些属性,所以还需要导入aop的包

<tx:advice id="txAdvice"><tx:attributes><tx:method name="add*" propagation="REQUIRED"/>//定义add开头的方法<tx:method name="*" propagation="SUPPORTS"   read-only="true"/>//定义其他方法,这其中可以设置事务的五个属性</tx:attributes></tx:advice>

使用注解声明一个事务

<tx:annotation-driven>//在xml中声明这行即可

这时spring会查找上下文中所有@Transactiona注解的Bean,事务属性通过注解的参数来实现

@Transactional(propagation=Propagation.REQUIRED,isolation=Isolation.READ_COMMITTED,readOnly=false, timeout=1)//大概这样

spring实战学习(六)事务管理相关推荐

  1. 全面分析 Spring 的编程式事务管理及声明式事务管理(转)

    摘要 Spring 的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握.本教程从基础知识开始,详细分析了 Spring 事务管理的使用 ...

  2. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  3. spring 的4种事务管理(1种编程式+3种声明式)

    见:http://blog.csdn.net/sinat_25926481/article/details/48208619 Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Sprin ...

  4. Spring基于Annotation实现事务管理

    在 Spring 中,除了使用基于 XML 的方式可以实现声明式事务管理以外,还可以通过 Annotation 注解的方式实现声明式事务管理. 使用 Annotation 的方式非常简单,只需要在项目 ...

  5. Spring的4种事务管理(1种编程式事务+三种声明事务)

    2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...

  6. 在Spring中使用JTA事务管理

    在Spring中使用JTA事务管理 Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻.但是很大部分人都还 ...

  7. spring配置c3p0连接池、spring的声明式事务管理

    一.spring配置c3p0连接池: 1.导入maven依赖: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> & ...

  8. spring的annotation-driven配置事务管理器详解

    来源:http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html 这篇文章是我从ITeye上复制来的,看了一遍,觉得很深刻,决定把他复制来,对原作者表示感 ...

  9. Spring框架声明式事务管理

    Spring框架声明式事务管理 底层就是AOP原理,面向切面编程 在不修改源码的情况下,对方法进行增强 Spring框架事务管理相关类和API PlatformTransactionManager 平 ...

  10. Spring 注解方式实现 事务管理

    2019独角兽企业重金招聘Python工程师标准>>> 使用步骤: 步骤一.在spring配置文件中引入<tx:>命名空间 <beans xmlns="h ...

最新文章

  1. Datalist控件,Repeater控件如何分页?
  2. ubuntu下python+tornado+supervisor+nginx部署
  3. C语言中#define的用法(转)
  4. 2018年12月份GitHub上最热门的Java开源项目
  5. linux 迁移mysql目录_linux默认mysql迁移目录
  6. sstap tun虚拟网卡没有安装_虚拟设备之TUN和TAP
  7. 用泰勒公式求近似值_满足多个条件求最值,用这2个函数组合,写出来的公式如此简单...
  8. matlab设置图片背景透明_Matlab保存透明图片程序
  9. 深度学习用于图像超分辨率重建综述——超分辨率(一)
  10. 1133_SICP开发环境搭建
  11. [Excel知识技能] 筛选功能
  12. 网站为什么会被降权?如何恢复网站被降权,没有流量呢?
  13. 聚力优创:拼多多的店铺怎么引流?秘诀分享
  14. 全网征集对六如偈的理解:一切有为法,如梦幻泡影,如露亦如电,应作如是观
  15. 树莓派是网盘?nextcloud在树莓派上的应用
  16. 运动快乐的来源-内啡肽
  17. 有各组方差怎么算组间平方和_方差分析中组内离差平方和,组间离差平方和的意义...
  18. js中window。location.search的用法和作用。
  19. 计算机网络 考博试题,计算机网络考博题集及参考答案9
  20. pdf预览 pdf.js+pdfObject

热门文章

  1. html5 canvas 扫雷游戏
  2. 服务器看门狗硬件,软件看门狗和硬件看门狗的作用和区别
  3. 70-webApp打包:将网站利用hbuilder打包为安卓app
  4. 解决Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart
  5. 程序员之间的鄙视链-2022.10.04
  6. 每天一练——斐波那契数列前N项之和
  7. 我不服!这开源项目居然才888个星!?
  8. 被调查7小时心生怨气 男子朋友圈辱骂警察被行拘
  9. win7系统 (32位)安装包
  10. 检测计算机故障五大原则,电脑故障维修的基本原则及流程