做一个网站需要多长时间,wordpress国内医疗,北京公司响应式网站建设价位,软件定制软件开发公司事务#xff08;Transaction#xff09;是基于关系型数据库#xff08;RDBMS#xff09;的企业应用的重要组成部分。在软件开发领域#xff0c;事务扮演者十分重要的角色#xff0c;用来确保应用程序数据的完整性和一致性。 事务具有 4 个特性#xff1a;原子性、一致性…事务Transaction是基于关系型数据库RDBMS的企业应用的重要组成部分。在软件开发领域事务扮演者十分重要的角色用来确保应用程序数据的完整性和一致性。事务具有 4 个特性原子性、一致性、隔离性和持久性简称为 ACID 特性。原子性Atomicity一个事务是一个不可分割的工作单位事务中包括的动作要么都做要么都不做。一致性Consistency事务必须保证数据库从一个一致性状态变到另一个一致性状态一致性和原子性是密切相关的。隔离性Isolation一个事务的执行不能被其它事务干扰即一个事务内部的操作及使用的数据对并发的其它事务是隔离的并发执行的各个事务之间不能互相打扰。持久性Durability持久性也称为永久性指一个事务一旦提交它对数据库中数据的改变就是永久性的后面的其它操作和故障都不应该对其有任何影响。事务允许我们将几个或一组操作组合成一个要么全部成功、要么全部失败的工作单元。如果事务中的所有的操作都执行成功那自然万事大吉。但如果事务中的任何一个操作失败那么事务中所有的操作都会被回滚已经执行成功操作也会被完全清除干净就好像什么事都没有发生一样。在现实世界中最常见的与事务相关的例子可能就是银行转账了。假设我们需要将 1000 元从 A 账户中转到 B 账户中这个转账操作共涉及了以下两个操作。从 A 账户中扣除 1000 元往 B 账户中存入 1000 元。如果 A 账户成功地扣除了 1000 元但向 B 账户存入时失败的话那么我们将凭空损失 1000 元如果 A 账户扣款时失败但却成功地向 B 账户存入 1000 元的话我们的账户就凭空多出了 1000 元那么银行就会遭受损失。因此我们必须保证事务中的所有操作要么全部成功要么全部失败理解了这一点我们也就抓住了事务的核心。作为一款优秀的开源框架和应用平台Spring 也对事务提供了很好的支持。Spring 借助 IoC 容器强大的配置能力为事务提供了丰富的功能支持。事务管理方式Spring 支持以下 2 种事务管理方式。选择编程式事务还是声明式事务很大程度上就是在控制权细粒度和易用性之间进行权衡。编程式对事物控制的细粒度更高我们能够精确的控制事务的边界事务的开始和结束完全取决于我们的需求但这种方式存在一个致命的缺点那就是事务规则与业务代码耦合度高难以维护因此我们很少使用这种方式对事务进行管理。声明式事务易用性更高对业务代码没有侵入性耦合度低易于维护因此这种方式也是我们最常用的事务管理方式。Spring 的声明式事务管理主要通过以下 2 种方式实现基于 XML 方式的声明式事务管理基于注解方式的声明式事务管理事务管理器Spring 并不会直接管理事务而是通过事务管理器对事务进行管理的。在 Spring 中提供了一个 org.springframework.transaction.PlatformTransactionManager 接口这个接口被称为 Spring 的事务管理器其源码如下。public interface PlatformTransactionManager extends TransactionManager {TransactionStatus getTransaction(Nullable TransactionDefinition definition) throws TransactionException;void commit(TransactionStatus status) throws TransactionException;void rollback(TransactionStatus status) throws TransactionException;}该接口中各方法说明如下这些事务管理器的使用方式十分简单我们只要根据持久化框架或平台选用相应的事务管理器实现即可实现对事物的管理而不必关心实际事务实现到底是什么。TransactionDefinition 接口Spring 将 XML 配置中的事务信息封装到对象 TransactionDefinition 中然后通过事务管理器的 getTransaction() 方法获得事务的状态TransactionStatus并对事务进行下一步的操作。TransactionDefinition 接口提供了获取事务相关信息的方法接口定义如下。public interface TransactionDefinition {int getPropagationBehavior();int getIsolationLevel();String getName();int getTimeout();boolean isReadOnly();}该接口中方法说明如下。事务的隔离级别事务的隔离级别定义了一个事务可能受其他并发事务影响的程度。在实际应用中经常会出现多个事务同时对同一数据执行不同操作来实现各自的任务的情况。此时就有可能导致脏读、幻读以及不可重复读等问题的出现。在理想情况下事务之间是完全隔离的这自然不会出现上述问题。但完全的事务隔离会导致性能问题而且并不是所有的应用都需要事务的完全隔离因此有时应用程序在事务隔离上也有一定的灵活性。Spring 中提供了以下隔离级别我们可以根据自身的需求自行选择合适的隔离级别。关于事务隔离级别、脏读、幻读、不可重复度等概念的详细介绍请阅读《数据库事务隔离级别》一节。事务的传播行为事务传播行为propagation behavior指的是当一个事务方法被另一个事务方法调用时这个事务方法应该如何运行。例如事务方法 A 在调用事务方法 B 时B 方法是继续在调用者 A 方法的事务中运行呢还是为自己开启一个新事务运行这就是由事务方法 B 的事务传播行为决定的。事务方法指的是能让数据库表数据发生改变的方法例如新增数据、删除数据、修改数据的方法。Spring 提供了以下 7 种不同的事务传播行为。TransactionStatus 接口TransactionStatus 接口提供了一些简单的方法来控制事务的执行、查询事务的状态接口定义如下。public interface TransactionStatus extends SavepointManager {boolean isNewTransaction();boolean hasSavepoint();void setRollbackOnly();boolean isRollbackOnly();boolean isCompleted();}该接口中各方法说明如下。