Spring(十四)之事务
事务管理一个数据库事务是一个被视为单一的工作单元的操作序列。这些操作应该要么完整地执行,要么完全不执行。事务管理是一个重要组成部分,RDBMS 面向企业应用程序,以确保数据完整性和一致性。事务的概念可以描述为具有以下四个关键属性说成是?ACID:
一个真正的 RDBMS 数据库系统将为每个事务保证所有的四个属性。使用 SQL 发布到数据库中的事务的简单视图如下:
Spring 框架在不同的底层事务管理 APIs 的顶部提供了一个抽象层。Spring 的事务支持旨在通过添加事务能力到 POJOs 来提供给 EJB 事务一个选择方案。Spring 支持编程式和声明式事务管理。EJBs 需要一个应用程序服务器,但 Spring 事务管理可以在不需要应用程序服务器的情况下实现。 ? 局部事物 vs. 全局事务局部事务是特定于一个单一的事务资源,如一个 JDBC 连接,而全局事务可以跨多个事务资源事务,如在一个分布式系统中的事务。 局部事务管理在一个集中的计算环境中是有用的,该计算环境中应用程序组件和资源位于一个单位点,而事务管理只涉及到一个运行在一个单一机器中的本地数据管理器。局部事务更容易实现。 全局事务管理需要在分布式计算环境中,所有的资源都分布在多个系统中。在这种情况下事务管理需要同时在局部和全局范围内进行。分布式或全局事务跨多个系统执行,它的执行需要全局事务管理系统和所有相关系统的局部数据管理人员之间的协调。 编程式 vs. 声明式Spring 支持两种类型的事务管理:
声明式事务管理比编程式事务管理更可取,尽管它不如编程式事务管理灵活,但它允许你通过代码控制事务。但作为一种横切关注点,声明式事务管理可以使用 AOP 方法进行模块化。Spring 支持使用 Spring AOP 框架的声明式事务管理。 ? Spring 事务抽象Spring 事务抽象的关键是由 org.springframework.transaction.PlatformTransactionManager 接口定义,如下所示: public interface PlatformTransactionManager { TransactionStatus getTransaction(TransactionDefinition definition); throws TransactionException; void commit(TransactionStatus status) void rollback(TransactionStatus status) TransactionException; } ? TransactionDefinition 是在 Spring 中事务支持的核心接口,它的定义如下: TransactionDefinition { int getPropagationBehavior(); getIsolationLevel(); String getName(); getTimeout(); boolean isReadOnly(); } ? ? 隔离级别可能值: 传播类型的可能值: TransactionStatus 接口为事务代码提供了一个简单的方法来控制事务的执行和查询事务状态。 interface TransactionStatus extends SavepointManager { isNewTransaction(); hasSavepoint(); void setRollbackOnly(); isRollbackOnly(); isCompleted(); } 事务为什么这么中重要?正如事务的四个特性那样,原子性,一致性,隔离性,持久性,确保数据稳定、安全、真实。银行取钱的例子足以说明。 谁都不希望,因为系统方面的事务没有做好,特别是金融方面的软件,如果事务没有做好,损失将会是非常大的。对于企业而言,因为事务原因,用户莫名其妙账户上多了几个0,对于用户当然是非常高兴的一件事,但是对于企业则是毁灭性打击。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Java的HttpURLConnection不支持REPORT / PROPFIND – 我该怎
- Java:如何在相应的一周内对所有Java日期进行分组?
- java – 如何检查字段是否为空以及如何读取输入的文本?
- java中的switch case语句
- java – 为两个不同集合中的元素保留了多少个实例?
- Writing Images to the Excel Sheet using PHPExcel--转载
- java – 如何在Jbutton的边缘添加间隙?
- Java – HashSet实现不支持remove()的迭代器的最佳方法
- java – DetailedState.VERIFYING_POOR_LINK代表什么
- Java递归插入排序?