Spring in action 2 学习笔记
第6章 事务管理
6.1理解事务
事务在软件中扮演了一个重要的角色,用于确保数据和资源永远不会处于一种不一致的状态下。没有事务,就可能会出现数据被破坏,或者是应用程序中的业务规则缺乏一致性。
6.1.1仅有4个词解释事务
ACID 事务的四要素
原子性(Atomic)---事务有一个或多个行为捆绑在一起组成,好像是一个单独的工作单元。原子性确保在事务中的所有操作要么都发么要么都并不发生。假如所有行为都成功了那么相应的事务就是成功的,假如任何一个行为失败了,那么整个事务就失败了,并且被回滚。
一致性(Consistent)---一旦一个事务结束了(不管成功与否),系统所处的状态和它的业务规则是一致的,用现实中的话就是所有数据应当不会被破坏
隔离性(Isolated)---事务应该允许多名用户操作同一个数据,一名用户的操作不会和其他用户的操作想混淆,因此事务必须是相互隔离的,防止并行读写同一个数据的情况发生。注意隔离通常意味着要锁定数据库里的记录行或表
持久性(Durable)---一旦事务完成,事务的结果应该持久化这样不管什么样的系统崩溃他们都将幸免于难。通常把事务的结果保存在数据库或其他形式的持久化存储设备中
小结:当任何一步失败率,事务就能通过撤销所有步骤的结果来保证原子性,原子性支持一致性因为它确保系统中的数据永远不处于一中不一致的,部分完成的状态。隔离性也支持一致性,最后结果将被持久化,因为他们将提交到某个持久化存储中,当系统崩溃了或发生其他灾变性时间时,你就不用担心该事务的结果会丢失。
6.1.2 理解Spring对事务管理的支持
Spring和EJB一样都支持编程式事务和声明式事务,spring的事务管理能力要超过EJB
EJB的事务管理和JTA密不可分,spring使用一种回调机制。如果你的应用程序只使用单一的持久化资源(我理解就是不基于分布式),那么spring就可以使用该持久性机制本身所提供的事务管理支持,这些机制包括JDBC,HIBERNATE,JDO,OJB,等然而如果你的应用程序有跨越多个资源的事务组成(个人理解基于分布式),那么spring可以使用基于第三方的JTA实现支持分布式事务。
编程式事务管理能让你在代码中精确的定义事务边界,声明式事务则有助于把一个操作从其事务规则中分离出来(抽离到XML配置文件中或基于注解方式),Spring对声明式事务的支持,让人联想其EJB的容器管理事务CMT,他们都允许你声明式地定义事务边界,但是Spring的声明式事务要胜过CMT,因为它允许你声明额外的参数,诸如隔离级别和超时设定。
无论你是使用编程式事务还是使用声明式事务,很大程度是在细微控制和简便操作之间做出决定。
不管你是选择在bean中编写事务还是像切面(ASPECT)那样声明他们,你都将使用一个spring的事务管理器连接特定平台的事务实现,
6.2 选择事务管理器
Spring不直接管理事务,相反它提供很多可供选择的事务管理器,将事务管理的责任委托给由JTA或相应的持久性机制的某个特定平台事务实现
事务管理器实现(org.springframework.*) 使用时机
Jdbc.datasource.DataSourceTransactionManager 正在使用spring的JDBC抽象实现。
Orm.hibernate3.HibernateTransactionManager 正在为持久性使用hibernate3
Orm.jpa.JpaTrasactionManager 正在为持久性使用JPA
Transaction.jta.JtaTransactionManager 需要分布式事务或者在没有其他事务管理器符合要求时
以上只是列举了比较常用的事务管理器,它们充当了某一特定平台的事务实现的门面
Spring的事务管理器
特定平台的事务实现
要使用一个事务管理器,就需要把它配置到applicationContext.XML中
6.2.1 JDBC事务
<bean id="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
6.2.2 Hibernate事务
<bean id="transactionManager"
class="org.springframework.orm.hibernate.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
Hibernate 3.x
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
6.2.3 JPA事务
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>
6.2.4 JTA事务
<bean id="transactionManager"
class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName"
value="java:/TransactionManager"/>
</bean>
分享到:
相关推荐
Spring in Action中文清晰版(带阅读笔记). Spring in Action中文清晰版(带阅读笔记).
Spring in Action中文清晰版(带阅读笔记)
### Spring in Action 学习笔记知识点总结 #### 1. Spring 框架基础 ##### 1.1 Spring 概述 - **轻量级**:Spring 的“轻量级”主要体现在其对资源消耗较少,同时具备低入侵性。在基于 Spring 开发的应用中,业务...
Spring in Action 中间带有读书笔记, 第2部分共4部分
Spring in Action 中文 清晰版 (带阅读笔记)(共压缩4分卷) 此第3分卷 是扫描版的 感谢分享的兄弟
### Spring In Action笔记100例精要解析 #### 1. `<ref>`标签中的`bean`, `local`, `parent`三个属性的区别 在Spring框架中,`<ref>`标签用于表示一个对象引用,通常用来注入另一个Bean。该标签包含三个重要的属性...
《Spring in Action》是一本深度剖析Spring框架的权威著作,其中文清晰版为中国的开发者提供了便利,便于理解和学习。本书全面覆盖了Spring的核心概念和技术,包括依赖注入、AOP(面向切面编程)、数据访问、Web开发...
Spring in Action 中文 清晰版 (带阅读笔记).part2
SSH是Java开发中广泛使用的三大框架——Struts2、Hibernate和Spring的缩写。这三大框架结合使用,能够构建高效、灵活的企业级Web应用程序。现在,让我们深入探讨这些框架的知识点。 **Struts2笔记** Struts2是MVC...
Spring in Action 中文 清晰版 (带阅读笔记).part1
1. **Spring依赖注入(IOC)**: Spring的IOC容器是其核心,负责创建对象并管理它们的生命周期。通过配置文件或注解,开发者可以声明对象及其依赖关系,使代码更易于测试和维护。`spring_ioc.txt`可能详细解释了如何...
Spring in Action 中间带有读书笔记 第4部分共4部分
Spring in Action 中间带有读书笔记,第3部分共4部分
1. **Singleton**(单例):每个Spring IoC容器仅有一个bean实例。 2. **Prototype**(原型):每次请求都会创建一个新的bean实例。 3. **Session**(会话):每个HTTP会话都有一个对应的bean实例。 4. **Request**...
读书笔记:《Spring Boot实战》Spring Boot in Action
- **Struts2,Hibernate,Spring**:确保引入了所有必要的jar包,包括Struts2的action、result、filter等,Hibernate的session工厂和日志库,以及Spring的相关模块。 这些知识点构成了Spring框架的基础,理解和掌握...
2. 自动方式:引入 Spring 的 Web 包和 Struts 的 Spring 插件,配置监听器和应用上下文路径,让 Struts 从 Spring 容器中查找 Action 类,实现单例化,提高效率。 监听器如 ContextLoaderListener 在项目启动时...