Spring(七):事务管理

1、理解事务

在软件开发领域中,全有或全无的操作被称为事务。

事务允许你将几个操作组合成一个要么全部发生要么全部不发生的工作单元。

1.1、事务的特性

事务的4个特性ACID:

  • 原子性(Atomic):事务是由一个或多个活动所组成的一个工作单元。

原子性确保事务中的所有操作全部发生或全部不发生。所有活动成功事务才成功,任意一个活动失败了事务也失败并回滚。

  • 一致性(Consistent):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态。
  • 隔离性(Isolated):事务允许多个用户对相同的数据进行操作,每个用户的操作不会与其他用户纠缠在一起。

事务应该被彼此隔离,避免发生同步读写相同数据的事情(隔离性往往涉及到锁定数据库的行或表)。

  • 持久性(Durable):一旦事务完成,事务的结果应该持久化,这样就能从任何的系统崩溃中恢复过来。

这一般涉及将结果存储到数据库或其他形式的持久化存储中。

1.2、Spring对事务管理的支持

如果应用程序只使用一种持久化资源,Spring可以使用持久化机制本身所提供的事务性支持,包括了JDBC、Hibernate以及Java持久化API(Java Persistent API,JPA)。

但是如果应用程序的事务跨多个资源,那么Spring会使用第三方的JTA实现来支持分布式事务。

Spring支持编码式事务和声明式事务,编码式事务允许用户在代码中精确定义事务的边界,而声明式事务(基于AOP)有助于用于将操作与事务规则进行解耦。

2、选择事务管理器

Spring并不直接管理事务,而是提供了多种事务管理器,它们将事务管理的职责委托给JTA(Java Transaction API)或其他持久化机制所提供的平台相关的事务实现。

Spring几种常见的事务管理器:

事务管理器 使用场景
jdbc.datasource.DataSourceTransactionManager 用于Spring对JDBC抽象的支持,也可以用于使用Mybatis进行持久化的场景
org.hibernate3.HibernateTransactionManager 用于Hibernate3进行持久化
orm.jpa.JpaTransactionManager 用于java持久化API(JPA)进行持久化
transaction.jta.JtaTransactionManager 需要分布式事务或者没有其他的事务管理器满足需求

3、声明式事务

Spring对声明式事务的支持是通过使用Spring AOP框架实现的。这是很自然的一件事,因为事务是在应用程序主要功能之上的系统服务。可以将Spring事务想象成方法”包装“上事务边界的切面。

时间: 2024-08-07 08:23:24

Spring(七):事务管理的相关文章

Spring Boot事务管理(中)

在上一篇 Spring Boot事务管理(上)的基础上介绍Spring Boot事务属性和事务回滚规则 . 4 Spring Boot事务属性 什么是事务属性呢?事务属性可以理解成事务的一些基本配置,描述了事务策略如何应用到方法上.事务属性包含了5个方面,如图所示,它们定义于TransactionDefinition接口类   1. 事务隔离级别 隔离级别是指若干个并发事务之间的隔离程度. Spring Boot的隔离级别被封装在枚举类Isolation,枚举值取自接口TransactionDe

spring与事务管理

就我接触到的事务,使用最多的事务管理器是JDBC事务管理器.现在就记录下在spring中是如何使用JDBC事务管理器 1)在spring中配置事务管理器 <!-- JDBC事务 -->    <bean id="jdbcTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">        <property

Spring初学之spring的事务管理xml

所有的java类都是用的上一篇文章:Spring初学之spring的事务管理 不同的是,这时xml配置事务,所以就要把java类中的那些关于spring的注解都删掉,然后在xml中配置,ApplicationContext.xml如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans&q

Spring的事务管理

事务 事务:是逻辑上一组操作,要么全都成功,要么全都失败. 事务特性(ACID) 原子性:事务不可分割 一致性:事务执行的前后,数据完整性保持一致 隔离性:一个事务执行的时候,不应该受到其他事务的打扰 持久性:一旦结束,数据就永久的保存到数据库 如果不考虑隔离性 脏读:一个事务读到另一个事务未提交数据 不可重复读:一个事务读到另一个事务已经提交数据(update)导致一个事务多次查询结果不一致 虚读:一个事务读到另一个事务已经提交数据(insert)导致一个事务多次查询结果不一致 事务的隔离级别

spring笔记--事务管理之声明式事务

事务简介: 事务管理是企业级应用开发中必不可少的技术,主要用来确保数据的完整性和一致性, 事务:就是一系列动作,它们被当作一个独立的工作单元,这些动作要么全部完成,要么全部不起作用. Spring中使用事务: 作为一个受欢迎的企业应用框架,Spring在不同的事务管理API上定义了一个抽象层,而开发时不必了解底层的事务管理API,就可以使用Spring的事务管理机制. Spring既支持编程式的事务管理,也支持声明式的事务管理,大多数情况我们选择后者. 编程式事务管理:将事务管理代码嵌入到业务代

mybatis集成spring的事务管理

第一 创建一个测试实体 1 public class Order { 2 3 private int id; 4 private String orderName; 5 6 public Order(String orderName) { 7 this.orderName = orderName; 8 } 9 10 public int getId() { 11 return id; 12 } 13 public void setId(int id) { 14 this.id = id; 15

Spring初学之spring的事务管理注解

spring的事务管理,本文的例子是:比如你需要网购一本书,卖书的那一方有库存量以及书的价格,你有账户余额.回想我们在编程中要实现买书这样的功能,由于你的账户表和书的库存量表肯定不是同一张数据库表,所以必定会有一个先后,要么先将账户余额扣除书的价格,紧接着将书的库存量减一,要么反过来.那么问题来了,假如我们先将你的账户余额减掉,然后发现书的库存不足,这时怎么办呢,这就需要事务了,当我们发现书的库存不足时就要回滚事务,将你的余额返回去.只要配置了事务,发生了异常,就回滚.这就是事务的回滚.注:新人

深入Spring:自定义事务管理

转自: http://www.jianshu.com/p/5347a462b3a5 前言 上一篇文章讲了Spring的Aop,这里讲一下Spring的事务管理,Spring的事务管理是建立在Aop的基础上的,相比Aop,事务管理的实现耦合性比较小,自定义就比较简单了. 自定义事务 Spring的开启事务管理主要是通过@EnableTransactionManagement注解来实现的.查看源码就会发现,这个注解主要是注入了两个类InfrastructureAdvisorAutoProxyCrea

Spring高级事务管理难点剖析

1Spring事务传播行为 所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播.Spring支持7种事务传播行为 PROPAGATION_REQUIRED(加入已有事务) 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中.这是最常见也是默认的方式. PROPAGATION_SUPPORTS(跟随环境) 支持当前事务,如果当前没有事务,就以非事务方式执行. PROPAGATION_MANDATORY(需要事务) 使用当前的事务,如果当前没有事务,就抛出异

spring,mybatis事务管理配置与@Transactional注解使用

spring,mybatis事务管理配置与@Transactional注解使用[转] 概述事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性.Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects) 支持声明式事务管理,特别是基