深入Spring事务(一)Spring事务概述

Spring事务概述

一、事务概述

事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。

事务必需满足ACID(原子性、一致性、隔离性和持久性)特性,缺一不可:

原子性(Atomicity):即事务是不可分割的最小工作单元,事务内的操作要么全做,要么全不做;

一致性(Consistency):在事务执行前数据库的数据处于正确的状态,而事务执行完成后数据库的数据还是处于正确的状态,即数据完整
性约束没有被破坏;如银行转帐,A转帐给B,必须保证A的钱一定转给B,一定不会出现A的钱转了但B没收到,
否则数据库的数据就处于不一致(不正确)的状态。

隔离性(Isolation):并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性;

持久性(Durability):事务一旦执行成功,它对数据库的数据的改变必须是永久的,不会因比如遇到系统故障或断电造成数据不一致或丢失

二、Spring事务配置使用

1、  编程式事务管理

所谓编程式事务指的是通过编码方式实现事务,包括三种方式:使用PlatformTransactionManager、使用TransactionTemplate编程、基于Savepoint的嵌套事务。

使用TransactionTemplate进行编程式事务管理是推荐的方式。我们以TransactionTemplate为例

定义数据源

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName">

<value>java:/comp/env/jdbc/oracle</value>

</property>

</bean>

定义事务管理器

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

定义dao

<bean id="customerDAO" class="com.waterye.dao.impl.CustomerDAOImpl">

<property name="dataSource" ref="dataSource" />

<property name="transactionManager" ref="transactionManager" />

</bean>

实现

public class CustomerDaoImpl extends JdbcDaoSupport implements CustomerDAO {

private DataSource dataSource;

pirvate TransactionManager transactionManager;

public void setDataSource(DataSource dataSource) {

this.dataSource = dataSource;

}

public void setTransactionManager(DataSourceTransactionManager transactionManager) {

this.transactionManager = transactionManager;

}

public void delete(Integer id) throws Exception {

String deleteSql = "delete from customer where id = ?";

TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);

transactionTemplate.execute(new TransactionCallbackWithoutResult() {

protected void doInTransactionWithoutResult(TransactionStatus status) {

getJdbcTemplate().update(deleteSql, new Object[] { id });

}

}

}

}

2、声明式事务管理

声明式事务管理可以避免这种不同系统关注点之间的纠缠,使得事务管理代码不用再去“污染”具体业务逻辑的实现,包括两种方式:Annotation元数据驱动的声明式事务、XML元数据驱动的声明式事务

我们以Annotation声明为例

定义数据源

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiName">

<value>java:/comp/env/jdbc/oracle</value>

</property>

</bean>

定义事务管理器

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource" />

</bean>

定义JdbcTemplate

<bean id="jdbcTemplatePlatform"class="org.springframework.jdbc.core.JdbcTemplate">

<property name="dataSource"ref="dataSource" />

</bean>

支持注解事务处理

<tx:annotation-driven transaction-manager="transactionManager"/>

实现

@Repository

public class CustomerDaoImpl implements CustomerDAO {

@Qualifier("jdbcTemplatePlatform")

private JdbcTemplate jdbcTemplate;

public void delete(Integer id) throws Exception {

String deleteSql = "delete from customer where id = ?";

this.jdbcTemplate .update(deleteSql, new Object[] { id });

}

}

时间: 2024-11-10 13:18:37

深入Spring事务(一)Spring事务概述的相关文章

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

转自:http://www.open-open.com/lib/view/open1414310646012.html 关于本教程 本教程将深切讲授 Spring 庞杂而丁壮夜的事务治理功用,包括编程式事务和声明式事务.经由进程对本教程的进修,您将可以理解 Spring 事务治理的实质,并无邪运用之. 先决前提 本教程假定您已掌控了 Java 根蒂根抵常识,并对 Spring 有一定意见.您还需求具有根抵的事务治理的常识,好比:事务的界说,隔离级其他概念,等等.本文将直接行使这些概念而不做具体正

Spring笔记(四): spring的编程式事务与声明式事务

一.Spring 事务属性分析 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保证用户和银行的利益都不受损失. 在 Spring 中,事务是通过 TransactionDefinition 接口来定义的.该接口包含与事务属性有关的方法.在

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

开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解.您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等.本文将直接使用这些概念而不做详细解释.另外,您最好掌握数据库的基础知识,虽然这不是必须. 系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带

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

开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解.您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等.本文将直接使用这些概念而不做详细解释.另外,您最好掌握数据库的基础知识,虽然这不是必须. 系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带

spring源码之事务上篇

前言 本篇之前,已经写过关于AOP的源码分析,在此基础上来阅读事务的源码是比较清晰的.另外,需要对数据库有一定的了解,我们所说是事务一般指的都是狭义的事务,即数据库事务.文中没有特别指出的数据库,均指的是mysql,后面再来写一篇关于mysql的锁和事务的文章. 概述 事务指的是一个程序执行单元,这个执行单元要么成功,要么失败,绝对不允许存在中间状态,它是我们恢复和并发控制的基本单位. 学习事务时,一般会拿转钱来做说明,这里也拿张三向李四转100元来说明,这个过程分为两步,张三帐户减100,李四

Spring 的编程式事务管理及声明式事务管理

本文将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. Spring 事务属性分析 事务管理对于企业应用而言至关重要.它保证了用户的每一次操作都是可靠的,即便出现了异常的访问情况,也不至于破坏后台数据的完整性.就像银行的自助取款机,通常都能正常为客户服务,但是也难免遇到操作过程中机器突然出故障的情况,此时,事务就必须确保出故障前对账户的操作不生效,就像用户刚才完全没有使用过取款机一样,以保

spring ----编程式事务和声明式事务

一. 事务 事务管理对于企业应用而言是非常重要的,事务的存在保证了用户的每一次操作都是可靠的,当用户操作出现异常时也不至于破坏了后台的数据.例如银行的自动取款机,万一你在转账的时候出现了异常,事务机制会保证你后台的数据还是出异常操作之前的数据,也就是是你出异常的这些操作失效. 事务就是一组由于逻辑上紧密关联而合并成一个整体(工作单元)的多个数据库操作,这些操作要么都执行,要么都不执行. 银行转账操作:开启事务,就是保证转账的操作要么都执行,要么都不执行. 如果在你的账户减去转账金额后出现异常,不

Spring整合hibernate4:事务管理

Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTransaction,commit,这些都是重复的工作,我们可以把事务管理部分交给spring框架完成. 配置事务(xml方式) 使用spring管理事务后在dao中不再需要调用beginTransaction和commit,也不需要调用session.close(),使用API  sessionFactory.getCurrentSession()来

Spring 的官方的事务控制

Spring 官方版的事务控制 什么是事务? 事务是数据库(RDB)保证业务操作完整性的一种机制(强一致性) 事务在那里控制 业务层控制(Service 或Biz 或Business) 如何控制事务(不同的底层不同的控制) 如果是JDBC:----Connnection Connection.setAutoCommit(false) Connection.commit() Connection.rollback() 如果是Hibernate ------Session ---SessionFac

Spring中的Jdbc事务管理

Spring提供了对事务的声明式事务管理,只需要在配置文件中做一些配置,即可把操作纳入到事务管理当中,解除了和代码的耦合. Spring声明式事务管理,核心实现就是基于Aop. Spring声明式事务管理是粗粒度的事务控制,只能给整个方法应用事务,不可以对方法的某几行应用事务. Spring声明式事务管理器类: Jdbc技术:DataSourceTransactionManager Hibernate技术:HibernateTransactionManager 1.xml方式声明事务 引入tx名