Spring 编程式事务 (Spring 重点)

概述

Spring ⼿动操作事务和 MySQL操作事务类似,有 3 个重要操作步骤:

 • 开启事务(获取事务)

 • 提交事务

 • 回滚事务

重点

SpringBoot 内置了两个对象:

1. DataSourceTransactionManager 事务管理器.⽤来获取事务(开启事务),提交或回滚事务的

2. TransactionDefinition 是事务的属性,在获取事务的时候需要将 TransactionDefinition 传递进去从⽽获得⼀个事务TransactionStatus 

流程

        我们通过代码来学习操作事务的具体流程

        并没有给出完整的代码,只需要知道从 Spring IoC 容器中获取 userService 对象,可以通过 userService 对象调用 insertUser() 方法向数据库插入数据即可

        操作事务流程:

        1.DataSourceTransactionManager 和 TransactionDefinition  类的对象是内置于 Spring 中的,所以直接通过 @Autowired 注解从 Spring IoC 容器中获取即可。

        其中 DataSourceTransactionManager 代表事务管理器,TransactionDefinition 代表事务的属性,不进行处理的话就是默认的属性

        2. transactionManager(事务管理器)调用 getTransaction() 方法,以事务管理器的属性对象 transactionDefinition 作为参数创建一个事务,事务的类型为 TransactionStatus

        3.1 事务中的操作执行完毕后手动回滚事务,用 transactionManager 调用 rollback() 方法,要指明回滚的事务是谁,所以参数就是事务 transactionStatus 

        3.2 事务中的操作执行完毕后手动提交事务,用 transactionManager 调用 commit() 方法,要指明回滚的事务是谁,所以参数就是事务 transactionStatus

@Slf4j
@RequestMapping("/UserController")
@RestController
public class UserController {
    @Autowired
    private UserService userService;

    //事务管理器
    @Autowired
    private DataSourceTransactionManager transactionManager;

    //事务的属性对象
    @Autowired
    private TransactionDefinition transactionDefinition;

    @RequestMapping("/registry")
    public String registry(String userName,String password){
        //开启事务
        //transactionStatus 是事务执行前数据库的状态
        TransactionStatus transactionStatus=transactionManager.getTransaction(transactionDefinition);
        //事务执行的内容
        Integer result=userService.insertUser(userName,password);
        log.info("成功插入"+result+"条数据");

        //事务回滚
        //transactionManager.rollback(transactionStatus);

        //提交事务
        transactionManager.commit(transactionStatus);
        return "注册成功";
    }
}

效果展示

        当手动回滚事务以后,数据库中就没有插入对应的数据,但因为是插入后再回滚,所以从自增主键被占用一位可以看出痕迹,手动提交事务就正常的将数据插入到数据库中

提交事务得到的日志:

回滚事务得到的日志:

        从日志可以看出,提交事务有 committing (提交事务),deregistering(销毁事务),closing(关闭事务)等操作

        而回滚事务只有 deregistering(销毁事务),closing(关闭事务)等操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小林想被监督学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值