标签:
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事务想象成方法”包装“上事务边界的切面。
标签:
原文地址:http://my.oschina.net/u/1020238/blog/509768