1、事务的概念
事务是一个不可分隔的工作单元,其中的 SQL 语句要么全都执行,要么全都不执行,如果有一个失败的话,那么事务就会回滚到最开始的状态,仿佛什么都没发生过一样。在企业级应用程序开发中,事务管理是必不可少的技术,用来确保数据的完整性和一致性。 事务的四个特性:ACID 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用; 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏; 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏; 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。 2、Spring 中的事务管理 Spring 事务采用 AOP 的方式实现,包括三个要素: DataSource:事务的真正处理者,如 MySQL 等; TransactionManager:管理事务的处理过程,如打开、提交、回滚; 事务应用和属性配置:作为一个标识符表明哪些方法要参与事务,一些配置: 隔离级别、超时时间等。 具体核心接口包括: 事务管理器:如针对 JDBC 的 DataSourceTransactionManager; 事务属性定义:配置事务的一些基本属性,描述了事务策略如何应用到方法上,接口定义如下,具体包括以下属性: public interface TransactionDefinition { int getPropagationBehavior(); // 返回事务的传播行为 int getIsolationLevel(); // 返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据 int getTimeout(); // 返回事务必须在多少秒内完成 boolean isReadOnly(); // 事务是否只读,事务管理器能够根据这个返回值进行优化,确保事务是只读的 }(1)传播行为属性
(2)隔离级别属性
(3)只读属性
数据库可以利用事务的只读特性来进行一些特定的优化。通过将事务设置为只读,就可以给数据库一个机会,让它应用它认为合适的优化措施。 (4)事务超时属性 为了使应用程序很好地运行,事务不能运行太长的时间。因为事务可能涉及对后端数据库的锁定,所以长时间的事务会不必要的占用数据库资源。事务超时就是事务的一个定时器,在特定时间内事务如果没有执行完毕,那么就会自动回滚,而不是一直等待其结束。 (5)回滚规则 回滚规则定义了哪些异常可以导致事务回滚,而哪些不行。 标签:事务管理,事务,框架,只读,Spring,回滚,属性 From: https://www.cnblogs.com/qiqi-yi/p/17277381.html