1、事务介绍
事务(Transaction),一般是指要做的或所做的事情。在计算机术语中是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。
2、事务的四个特性(ACID)
①、原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
②、一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
③、隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
④、持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。
3、Spring 事务管理的核心接口
首先我们创建一个Java工程,然后导入 Spring 核心事务包我们打开Spring的核心事务包,查看如下类:
org.springframework.transaction
有3个接口文件PlatformTransactionManager、TransactionDefinition和TransactionStatus
1.PlatformTransactionManager 接口是Spring提供的平台事务管理器,主要用于管理事务。该接口中提供了三个事 务操作的方法,具体如下:
ransactionStatus getTransaction(TransactionDefinition definition);
用于获取事务状态信息
void commit(TransactionStatus status);
用于提交事务
void rollback(TransactionStatus status);
用于回滚事务
2.TransactionDefinition接口是事务定义(描述)的对象,该对象中定义了事务规则,并提供了获取事务相关信息的方法,其中包括五个操作:
String getName(): 获取事务对象名称。
int getIsolationLevel(): 获取事务的隔离级别。
int getPropagationBehavior(): 获取事务的传播行为。
int getTimeout():获取事务的超时时间。
boolean isReadOnly(): 获取事务是否只读。
3.TransactionStatus:事务状态,它描述了某一时间点上事务的状态信息。其中包含六个操作
void flush() 刷新事务
boolean hasSavepoint() 获取是否存在保存点
boolean isCompleted() 获取事务是否完成
boolean isNewTransaction() 获取是否是新事务
boolean isRollbackOnly() 获取是否回滚
void setRollbackOnly() 设置事务回滚
4、Spring 编程式事务和声明式事务的区别
编程式事务处理:所谓编程式事务指的是通过编码方式实现事务,允许用户在代码中精确定义事务的边界。即类似于JDBC编程实现事务管理。管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。
声明式事务处理:管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。
简单地说,编程式事务侵入到了业务代码里面,但是提供了更加详细的事务管理;而声明式事务由于基于AOP,所以既能起到事务管理的作用,又可以不影响业务代码的具体实现。