spring 声明式事务剖析

spring事务是在数据库事务的基础上进行封装扩展, 支持原有事务的隔离级别, 加入了事务传播的概念,提供多个事务合并和分割的功能, 提供声明式事务,让事务和业务代码分开

spring提供了三个接口供事务使用: TransacationDefinition(事务定义), PlatformTransactionManager(事务管理), TransactionStatus(事务运行时状态)

看一下TransactionDefinition接口

看一下PlatformTransactionManager, 里面三个方法: 获取事务, 提交事务,回滚事务

看一下TransactionStatus, 是否是新事务, 是否有保存点, 回滚方法, 是否已回滚,刷新方法,是否已结束

我们在spring的xml中这样的配置,大家很熟悉把

然后在方法上添加注解:@Transactional 注解即可

事务的传播机制:

实验场景: 有个UserService(用来向user表中插入一个用户记录), 和 AccountService(用于给这个用户创建一个账户, 向账户表中添加一条记录)
有个方法: 比如:
//@Transactional(propagation = Propagation.REQUIRED)
A(){
userService.insert();//插入一个用户记录
AccountService.insertAccount();//插入一个账户记录
}
@Transactional
AccountServiceImpl(){
insertAccount(){
//c操作数据库,插入一条账户记录
//人为制造异常
int i = 10/0;
}
}

结果为:

原文地址:https://www.cnblogs.com/lvcai/p/13381543.html