事务接口

PlatformTransationManager 接口
DateSourceTransationManager JDBC的事务实现(Mybatis同样用它)

事务管理器:选择合适的事务实现,添加到IOC容器中,
配置:
(导入对应的依赖) spring-context spring-tx spring-jdbc spring-aop spring-aspects
1.将对应的事务实现添加到IOC容器中,例如JDBC或Mybatis的事务实现:将DateSourceTransationManager添加到IOC容器中
2.声明事务注解生效 @EnableTransactionManagement
使用:
在需要添加事务的类上添加 @Transactional 注解
@Transactional:
在类上或方法上添加该注解表示为该类或方法添加事务。
特殊:
readOnly=”” 默认为false表示非只读,表示方法或类中sql非只读,true表示只读
timeout=”” 设置事务超时时间-1表示永不超时,单位秒
isolation=”” 设置事务的隔离级别
rollbackfor=”” 指定异常回滚和异常不回滚,默认值为RuntimeException.class @Transactional只回滚运行时异常,指定Exception.class时表示所有异常都回滚
propagation=”Propagation.REQUIRED” 传播行为:同一个业务的多事务场景下,希望将多事务变成一个事务。该属性用来设置当前子事务是否要加入到父事务中变成一个事务,默认加入
枚举值:
REQUIRED 子业务方法必须在事务中执行,父业务有事务,添加到父业务中,如果没有,自己独立创建事务
REQUIREDS_NEW 无论父业务中有没有事务,都会创建一个独立的事务使用
SUPPORTS 父业务中有事务就加入到事务中,如果没有就不在事务中执行
NOT_SUPPORTED 无论父业务中有没有事务,都不会在事务中执行
MANDATORY 父业务中有事务就加入,如果没有抛出异常
NEVER 父业务中有业务就抛出异常,如果没有就不在事务中执行


TransactionStatus接口是事物的状态,描述了某一时间事物的状态信息

void flush 刷新事物
boolean hasSavepoint 获取是否存在保护点
boolean isCompleted 获取事物是否完成
boolean isNewtransaction 获取是否是新事物
boolean isRollbackOnly 获取是否回滚
void setRollbackOnly 设置事物回滚

TransactionDefinition 接口是事务定义(描述)的对象
String getName():获取事务对象名称。
int getlsolationLevel():获取事务的隔离级别。
int getPropagationBehavior():获取事务的传播行为。
int getTimeout():获取事务的超时时间。
boolean isReadOnly():获取事务是否只读。

PlatformTransactionManager 接口是 Spring 提供的事务管理器接口,用于管理事务。Spring 将事务的配置详细信息封装到 TransactionDefinition 对象中,然后通过事务管理器的getTransaction()方法获得事务的状态(TransactionStatus),并对事务进行下一步的操作。
该接口中提供了三个事务操作方法,具体如下:
TransactionStatus getTransaction(TransactionDefinition definition) 用于获取事务
状态信息。
void commit(TransactionStatus status) 用于提交事务。
void rollback(TransactionStatus status) 用于回滚事务。

事物的传播行为
事务传播行为是指:多个含有事务的方法相互调用时,事务如何在这些方法间传播。
REQUIRED
支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
SuPPORTS
支持当前事务,如果当前没有事务,就以非事务方式执行。
MANDATORY
支持当前事务,如果当前没有事务,就抛出异常。
REQUIRES_NEW
新建事务,如果当前存在事务,把当前事务挂起。
NOT_SUPPORTED
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。