java web学习(进阶篇)八 Spring中的事务管理

来源:互联网 发布:ilust studio mac 编辑:程序博客网 时间:2024/05/17 11:08

一个数据库事务是一个被视为单一工作单元的操作序列。这些操作要么完整地执行,要么完全不执行。事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性。

事务(transaction)的概念可以描述为四个关键属性(ACID):

• 原子性:事务应该当作一个单独单元的操作。
• 一致性:数据库的引用完整性的一致性,表中唯一的主键等。
• 隔离性:可能同时处理很多有相同的数据集的事务,每个事务应该与其他事务隔离,以防止数据损坏。
• 持久性:一个事务一旦完成全部操作后,这个事务的结果必须是永久性的,不能因系统故障而从数据库中删除。

一个真正的 RDBMS 数据库系统将为每个事务保证所有的四个属性。使用 SQL 发布到数据库中的事务的简单过程如下:

• 使用 begin transaction 命令开始事务。
• 使用 SQL 查询语句执行各种删除、更新或插入操作。
• 如果所有的操作都成功,则执行提交操作,否则回滚所有操作。

Spring 框架在不同的底层事务管理 APIs 的顶部提供了一个抽象层。Spring 的事务支持旨在通过添加事务能力到 POJOs 来提供给 EJB 事务一个选择方案。Spring 支持编程式和声明式事务管理。EJBs 需要应用程序服务器,而Spring 事务管理可以在不需要应用程序服务器的情况下实现。

局部事务与全局事务

局部事务是特定于一个单一的事务资源,如一个 JDBC 连接,而全局事务可以跨多个事务资源事务,如在一个分布式系统中的事务。

局部事务管理在一个集中的计算环境中是有用的,该计算环境中应用程序组件和资源位于一个单位点,而事务管理只涉及到一个运行在一个单一机器中的本地数据管理器。局部事务更容易实现。

全局事务管理需要在分布式计算环境中,所有的资源都分布在多个系统中。在这种情况下事务管理需要同时在局部和全局范围内进行。分布式或全局事务跨多个系统执行,它的执行需要全局事务管理系统和所有相关系统的局部数据管理人员之间的协调。

编程式事务管理与声明式事务管理

• 编程式事务管理 :在编程的帮助下进行管理事务,灵活性好,但却很难维护。

• 声明式事务管理 :从业务代码中分离事务管理。仅仅使用注释或 XML 配置就能管理事务。

对比:

声明式事务管理比编程式事务管理更可取,尽管它不如编程式事务管理灵活,允许你通过代码控制事务,但作为一种横切关注点,声明式事务管理可以使用 AOP 方法进行模块化。Spring 支持使用 Spring AOP 框架的声明式事务管理。故推荐声明式事务。

实例

0 0
原创粉丝点击