文档章节

Spring事务回顾

喂码呢
 喂码呢
发布于 2017/07/27 15:04
字数 578
阅读 6
收藏 0

Spring 事务

————————————————————————————————————

事务的作用-ACID

将若干个数据库操作作为一个整体操作,要么全部成功要么全部失败

原子性:事务是一个不可分割的单位,要么发生,要么不发生

一致性:事务前后的数据完整性保持一致

隔离性:多个并发事务之间要保持隔离

持久性:一个事务一旦被提交,它对数据库中数据的改变是永久的

 

Spring事务管理高层抽象的3个主要接口

PlatformTransactionManager

Spring为不同的持久化框架提供了不同的Platform TransactionManager接口实现

如:

        使用Spring JDBC或iBatis进行持久化数据时使用DataSourceTransactionManager

        使用Hibernate3.0版本进行持久化数据时使用HibernateTransactionManager

 

TransactionDefinition

事务定义(属性)信息,包括:隔离级别、事务传播特性、超时、只读

事务隔离级别:

  • TransactionDefinition.ISOLATION_DEFAULT
  • TransactionDefinition.ISOLATION_READ_COMMITTED
  • TransactionDefinition.ISOLATION_READ_UNCOMMITTED
  • TransactionDefinition.ISOLATION_REPEATABLE_READ
  • TransactionDefinition.ISOLATION_SERIALIZABLE

 

事务的传播特性:

  • TransactionDefinition.PROPAGATION_MANDATORY
  • TransactionDefinition.PROPAGATION_NESTED
  • TransactionDefinition.PROPAGATION_REQUIRED
  • TransactionDefinition.PROPAGATION_NEVER
  • TransactionDefinition.PROPAGATION_NOT_SUPPORTED
  • TransactionDefinition.PROPAGATION_REQUIRES_NEW
  • TransactionDefinition.PROPAGATION_SUPPORTS

 

超时

  • TransactionDefinition.TIMEOUT_DEFAULT

 

只读

 

TransactionStatus

事务的运行状态

 

 

 

 

声明式事务

声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

 

配置方式:

  • 基于<tx>和<aop>名称空间的XML配置
  • 使用TransactionProxyFactoryBean生成事务代理对象
  • 基于@Transactional注解

 

 

@Transactional注解

该注解可以用于类、接口和方法,当该注解用于类上时该类上的所有public方法都有@Transactional注解所指定的事务属性,同时我们也可以在方法使用@Transactional去覆盖类上的@Transactional

要使得@Transactional注解生效必须配置:

<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>

 

编程式事务

使用TransactionTemplate将多个数据库操作封装成事务

© 著作权归作者所有

共有 人打赏支持
喂码呢
粉丝 5
博文 12
码字总数 5018
作品 0
浦东
程序员
Spring的事务管理难点剖析(3):事务方法嵌套调用的迷茫

Spring事务传播机制回顾 Spring事务一个被讹传很广说法是:一个事务方法不应该调用另一个事务方法,否则将产生两个事务。结果造成开发人员在设计事务方法时束手束脚,生怕一不小心就踩到地雷...

icheer
2012/07/17
0
0
Spring编程式和声明式事务实例讲解

Java面试通关手册(Java学习指南):https://github.com/Snailclimb/JavaGuide 历史回顾: 可能是最漂亮的Spring事务管理详解 Spring事务管理 Spring支持两种方式的事务管理: 编程式事务管理...

snailclimb
05/23
0
0
Spring @Async/@Transactional 失效的原因及解决方案

本来上一篇说要写关于AOP的实践的,但是这周刚好遇到了使用@Transactional和@Async的不生效的问题,这篇就进行一个回顾和记录。 之前提到实现AOP的方法有动态代理、编译期,类加载期织入等等...

陶源0111
06/25
0
0
day35_Spring学习笔记_03

一、事务管理 1.1、回顾事务 事务:一组业务操作ABCD,要么全部成功,要么全部不成功。 特性:ACID 原子性:整体 一致性:完成 隔离性:并发 持久性:结果 隔离问题: 脏读:一个事务读到另一...

黑泽明军
08/08
0
0
对JDBC的支持 之 7.1 概述

概述 JDBC回顾 传统应用程序开发中,进行JDBC编程是相当痛苦的,如下所示: //cn.javass.spring.chapter7. TraditionalJdbcTest @Test public void test() throws Exception { Connection co...

heroShane
2014/02/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

presto Resource Groups

资源组 资源组限制资源使用,可以对运行在其中的任务执行强制排队策略,也可以在子组间分配资源。一个任务属于一个资源组,消费这个组的资源。除了对排队任务限制外,当资源组用完资源时,不...

张欢19933
8分钟前
0
0
python连接Mysql错误:_mysql_exceptions: (1054

错误:python连接Mysql错误:_mysql_exceptions.OperationalError: (1054, "Unknown column 'CVE' in 'field lis解决办法 参考: https://blog.csdn.net/Homewm/article/details/81663504......

fang_faye
18分钟前
0
0
三分钟构建高性能WebSocket服务 | 超优雅的Springboot整合Netty方案

前言 每当使用SpringBoot进行Weboscket开发时,最容易想到的就是spring-boot-starter-websocket(或spring-websocket)。它可以让我们使用注解,很简单的进行Websocket开发,让我们更多的关注...

Yeauty
24分钟前
8
1
Windows下:Eclipse通过java开发spark程序【1】

准备:本机环境设置环境 jdk1.8,hadoop2.8.1(与服务器上hadoop环境保持一致) 第一步: 需要下载windows版本 bin目录下的文件,替换hadoop目录下原来的bin目录下的文件。下载网址是: https:...

那年的暖风
27分钟前
0
0
并发编程之AQS

一、定义 AQS(AbstractQueuedSynchronizer抽象类):是一个用于构建锁和同步容器的框架(通过继承AQS并实现它的抽象方法),它不是通过synchronized给对象加锁实现的,而仅仅只是一个工具类...

狠一点
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部