Spring 编程式事务 (Spring 重点)

这篇具有很好参考价值的文章主要介绍了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 "注册成功";
    }
}

效果展示

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

提交事务得到的日志:

Spring 编程式事务 (Spring 重点),spring,spring,java,后端

回滚事务得到的日志:

Spring 编程式事务 (Spring 重点),spring,spring,java,后端

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

        而回滚事务只有 deregistering(销毁事务),closing(关闭事务)等操作文章来源地址https://www.toymoban.com/news/detail-821555.html

到了这里,关于Spring 编程式事务 (Spring 重点)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java后端07(Spring)

    ​涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。 ​在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(sprin

    2024年02月13日
    浏览(36)
  • Java后端07(Spring未完成)

    ​涉及的设计模式:单例模式,简单工厂模式,代理模式,观察者模式,反射,注解。。。。。 ​在传统模式下,对象的创建和赋值,都是由开发者自己手动完成,事实情况下,开发者只关心如何获取赋值好的对象,但是并不希望自己手动进行创建对象和赋值的事情(sprin

    2024年02月14日
    浏览(50)
  • 【Java学习】 Spring的基础理解 IOC、AOP以及事务

        官网: https://spring.io/projects/spring-framework#overview     官方下载工具: https://repo.spring.io/release/org/springframework/spring/     github下载: https://github.com/spring-projects/spring-framework     maven依赖: 1.spring全家桶的结构构图:              最下边的是测试单元   其中spring封装

    2024年02月09日
    浏览(43)
  • JAVA后端开发面试基础知识(八)——Spring

    Spring是一个轻量级Java开发框架 我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发,比如说 Spring 支持 IoC(Inverse of Control:控制反转) 和 AOP(Aspect-Oriented Programming:面向切面编程)、可以很方便地对数据库进行访问、

    2024年03月10日
    浏览(74)
  • java Sping aop 以及Spring aop 的应用事务管理

    线程死锁概念和如何避免死锁的发生: 线程的通信 wait notify() notify():---Object类 线程的状态: NEW ---start()---就绪状态---CPU时间片---运行状态 RUNNABLE]- --sleep()--- TIMED_WAITING ---wait()---- WAITING ----sysn---Blocked---- 终止状态[T] 线程池: 常见的线程池种类: 4种和原始 在软件业,AOP为Aspect Ori

    2024年02月12日
    浏览(41)
  • 微信小程序的授权登录-Java 后端 (Spring boot)

    微信开发文档链接:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html 一个可以测试的微信小程序 此微信小程序的APPID和APPscret(至开发者后台获取) 从时序图我们可以了解到流程大致分为两步: 小程序端获取code后传给Java后台 Java后台获取code后向微信后台接口

    2024年02月09日
    浏览(55)
  • “从零开始学习Spring Boot:快速搭建Java后端开发环境“

    标题:从零开始学习Spring Boot:快速搭建Java后端开发环境 摘要:本文将介绍如何从零开始学习Spring Boot,并详细讲解如何快速搭建Java后端开发环境。通过本文的指导,您将能够快速搭建一个基于Spring Boot的Java后端开发环境并开始编写代码。 正文: 一、准备工作 在开始之前,

    2024年02月15日
    浏览(58)
  • 开发手册|Java后端开发规范重点条目整理

    Ps:部分熟知的开发规范未收录在本文中!暂无排版格式,等待后续添加…… 1.1 命名风格 代码中的命名严禁使用拼音与英文混合的方式 alibaba / taobao / youku / hangzhou 等国际通用的名称可视同英文 类名使用大驼峰的形式命名,例如 UpperCameCase 方法、参数与变量使用小驼峰的形式

    2024年02月14日
    浏览(45)
  • Springboot 编程式事务

    spring-boot 2.5.3版本 msyql SpringBoot编程式事务,可以使用2种方式。 默认TransactionAutoConfiguration自动装配。使用时直接注入TransactionTemplate 使用 推荐使用 编写一个测试类,简单测试一下,测试一下异常报错,手动设置回滚状态。 控制台打印 spring提供了TransactionCallback和子类Transac

    2024年02月11日
    浏览(42)
  • SpringBoot基础之声明式事务和切面事务和编程式事务

    事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性。 springBoot中两种事务的实现方式, 编程式事务配置和声明式事务配置还有切面事务 还有以后的分布式事务 详情参考 这篇 原子性(Atomicity): 事务是一个原子操作,由一系列动作组成

    2024年02月02日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包