我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spring中怎么管理事务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spring中怎么管理事务

今天小编给大家分享一下Spring中怎么管理事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

什么是事务

一个数据库事务是一个被视为一个工作单元的逻辑上的一组操作,这些操作要么全部执行,要么全部不执行。

需要注意的是,并不是所有的数据库(引擎)都支持事务,比如说MySQL的MyISAM存储引擎

事务的四个特性(ACID)

原子性:事务是一个原子性操作,一个事务由一系列操作组成,这一系列操作要么全部执行完成,要么全部不执行

一致性:一个事务执行完成(不管成功还是失败),数据库的完整性不能被破坏(唯一约束,外键约束等)

隔离性:数据库允许多个并发事务同时对数据进行读写操作,隔离性可以防止这些操作同时执行时导致的数据不一致的问题。事务分为不同的隔离级别:读未提交(read uncommitted)、读已提交(read committed)、可重复读(repeatable read)和串行化(Serializable)

持久性:持久性意味着事务完成之后,该事物对数据的更改会永久的保存在数据库中。

Spring对事务的支持

Spring支持编程式事务管理和声明式事务管理两种类型的事务管理。

编程式事务管理比较灵活,但是很难维护,平时用的很少。

声明式事务管理易用性更高,侵入性、耦合度低,更推荐使用。

编程式事务管理

使用TransactionTemplate进行编程式事务管理

    @Autowired    TransactionTemplate transactionTemplate;    public void doTest() {        transactionTemplate.execute(new TransactionCallbackWithoutResult() {            @Override            protected void doInTransactionWithoutResult(TransactionStatus transactionStatus) {                try {                    // 业务代码                    userMapper.deleteById(200106);                    int i = 10/0;                } catch (Exception e) {                    transactionStatus.setRollbackOnly();                }            }        });    }

使用PlatformTransactionManager进行编程式事务管理

    @Autowired    PlatformTransactionManager platformTransactionManager;    public void doTest() {        TransactionStatus transaction = platformTransactionManager.getTransaction(new DefaultTransactionDefinition());        try{            // 业务代码            userMapper.deleteById(200106);            int i = 10/0;            platformTransactionManager.commit(transaction);        }catch (Exception e){            platformTransactionManager.rollback(transaction);        }    }

声明式事务管理

Spring主要通过两种方式实现声明式事务管理:

基于注解的声明式事务管理

基于XML的声明式事务管理

基于注解的声明式事务管理

注解的事务管理主要靠@Transactional注解来实现的。

@Transactional注解可以作用于类或方法上,作用于类上时,该类的所有public方法都具有该事物属性

@Transactional注解只应该被应用到public修饰的方法上,这是有Spring AOP的本质决定的

    @Transactional    public void doTest() {        userMapper.deleteById(200106);        int i = 10/0;    }

@Transactional注解

@Target({ElementType.TYPE, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Transactional {// 指定事务管理器@AliasFor("transactionManager")String value() default "";@AliasFor("value")String transactionManager() default "";// 事务的传播行为(enum)Propagation propagation() default Propagation.REQUIRED;// 事务的隔离级别(enum)Isolation isolation() default Isolation.DEFAULT;// 事务超时时间int timeout() default TransactionDefinition.TIMEOUT_DEFAULT;// 读写或只读事务,默认读写事务boolean readOnly() default false;// 导致事务回滚的异常类Class<? extends Throwable>[] rollbackFor() default {};// 导致事务回滚的异常类名    // noRollbackForClassName = {"ArithmeticException"} String[] rollbackForClassName() default {};// 不会导致事务回滚的异常类Class<? extends Throwable>[] noRollbackFor() default {};// 不会导致事务回滚的异常类名String[] noRollbackForClassName() default {};}

Spring事务管理的三个接口

Spring对事务的操作主要通过PlatformTransactionManager接口,通过这个接口,Spring为各大平台提供了对应的事务管理器,如 JDBC(org.springframework.jdbc.datasource.DataSourceTransactionManager )等。

在Spring框架中,事务管理相关的最重要的三个接口如下:

PlatformTransactionManager

public interface PlatformTransactionManager extends TransactionManager {    // 根据指定的传播行为,该方法返回当前活动事务或创建一个新的事务TransactionStatus getTransaction(@Nullable TransactionDefinition definition)throws TransactionException;    // 提交指定的事务和关于它的状态void commit(TransactionStatus status) throws TransactionException;// 回滚事务void rollback(TransactionStatus status) throws TransactionException;}

TransactionDefinition

public interface TransactionDefinition {    // …………    // 返回传播行为default int getPropagationBehavior() {return PROPAGATION_REQUIRED;}    // 返回该事务隔离级别default int getIsolationLevel() {return ISOLATION_DEFAULT;}    // 返回超时时间default int getTimeout() {return TIMEOUT_DEFAULT;}    // 返回是否只读default boolean isReadOnly() {return false;}    // 返回事务名称@Nullabledefault String getName() {return null;}static TransactionDefinition withDefaults() {return StaticTransactionDefinition.INSTANCE;}}

TransactionStatus

public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable {boolean hasSavepoint();@Overridevoid flush();}

Spring中怎么管理事务

Spring事务属性

Spring事务管理的五大属性:隔离级别、传播行为、超时时间、是否只读、回滚规则

TransactionDefinition接口中定义了事务的隔离级别、传播行为、超时时间的常量

public interface TransactionDefinition {    // 当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务int PROPAGATION_REQUIRED = 0;    // ~,~,~,则继续以非事务的方式运行int PROPAGATION_SUPPORTS = 1;    // ~,~,~,则抛出异常int PROPAGATION_MANDATORY = 2;    // 创建一个新事务,如果当前存在事务,则把当前事务挂起int PROPAGATION_REQUIRES_NEW = 3;    // 以非事务的方式运行,如果当前存在事务,则把当前事务挂起int PROPAGATION_NOT_SUPPORTED = 4;    // 以非事务的方式运行,如果当前存在事务,则抛出异常int PROPAGATION_NEVER = 5;    // ~,则创建一个事务作为当前事务的嵌套事务来运行,~,则等价于PROPAGATION_REQUIREDint PROPAGATION_NESTED = 6;    // 默认的隔离级别int ISOLATION_DEFAULT = -1;    // 读未提交int ISOLATION_READ_UNCOMMITTED = 1;     // 读已提交int ISOLATION_READ_COMMITTED = 2;      // 可重复读int ISOLATION_REPEATABLE_READ = 4;     // 序列化读int ISOLATION_SERIALIZABLE = 8;     // 默认的超时时间,单位:秒    // 所谓事务超时,就是规定一个事务允许执行的最长时间,如果超过了该时间事务还没有执行完成,则回滚事务。int TIMEOUT_DEFAULT = -1;default int getPropagationBehavior() {return PROPAGATION_REQUIRED;}default int getIsolationLevel() {return ISOLATION_DEFAULT;}default int getTimeout() {return TIMEOUT_DEFAULT;}default boolean isReadOnly() {return false;}@Nullabledefault String getName() {return null;}static TransactionDefinition withDefaults() {return StaticTransactionDefinition.INSTANCE;}}

是否只读:指该事物是只读操作还是读写操作,boolean类型

回滚规则:我们可以人为的控制事务在执行过程中抛出某些异常时仍然提交事务,或者抛出某些异常时回滚事务

以上就是“Spring中怎么管理事务”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spring中怎么管理事务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spring中怎么管理事务

今天小编给大家分享一下Spring中怎么管理事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是事务一个数据库事务是一个
2023-07-02

spring怎么实现事务管理

Spring框架提供了多种方式来实现事务管理。下面是几种常见的方式:1. 声明式事务管理:使用Spring的事务管理器和注解或XML配置来声明事务管理规则。可以通过在方法或类级别上添加`@Transactional`注解来指定事务的属性(如
2023-09-28

Spring事务管理怎么正确使用

这篇文章主要介绍“Spring事务管理怎么正确使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring事务管理怎么正确使用”文章能帮助大家解决问题。事务(Transaction)是访问数据库的
2023-07-05

Spring事务管理中的异常回滚是什么

Spring中的代码出现异常时会回滚这是大家都希望的情况,这时候可以用@Transactional这个注解放在你的方法上来进行回滚,这时候有个问题就是事务回滚是不希望你在Controller进行处理,而是在Service层来进行处理
2023-02-09

深入浅析Java中的Spring事务管理

深入浅析Java中的Spring事务管理?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。环境与版本本文出来之前的一篇文章中的hibernate的相关lib 外Java事务管理之H
2023-05-31

Spring中事务管理的方式有哪些

Spring中事务管理的方式有以下几种:1. 编程式事务管理:通过编写代码来管理事务,需要手动开启、提交、回滚事务。可以使用`PlatformTransactionManager`接口进行事务的管理。2. 声明式事务管理:通过在配置文件中声
2023-09-29

Spring事务管理详细讲解

事务的作用就是为了保证用户的每一个操作都是可靠的,事务中的每一步操作都必须成功执行,只要有发生异常就 回退到事务开始未进行操作的状态。事务管理是Spring框架中最为常用的功能之一,我们在使用Spring Boot开发应用时,大部分情况下也都需要使用事务
2022-11-13

MySQL中怎么进行事务管理

在MySQL中,可以通过以下方式进行事务管理:开启事务:使用START TRANSACTION语句或BEGIN语句开启一个新的事务。提交事务:使用COMMIT语句提交当前事务的所有操作,将其保存到数据库中。回滚事务:使用ROLLBACK语句
MySQL中怎么进行事务管理
2024-04-09

PostgreSQL怎么管理事务

在 PostgreSQL 中,可以通过以下方法来管理事务:开始事务:使用 BEGIN 或 START TRANSACTION 语句开始一个新的事务。例如:BEGIN; 或 START TRANSACTION;提交事务:使用 COMMIT 语
PostgreSQL怎么管理事务
2024-04-09

详谈Spring框架之事务管理

一、编程式事务二、声明式事务1、基于XML的事务1.1 Spring配置文件 2023-05-31

Spring中怎么创建事务

这篇文章主要介绍了Spring中怎么创建事务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Spring事务执行原理通过创建一个BeanFactoryTransactionAt
2023-06-14

Spring事务管理下synchronized锁失效问题怎么解决

这篇文章主要介绍“Spring事务管理下synchronized锁失效问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring事务管理下synchronized锁失效问题怎么解决”文章
2023-06-29

如何在Spring中使用声明式事务管理

本篇文章为大家展示了如何在Spring中使用声明式事务管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基于TransactionProxyFactoryBean的事务管理配置Spring中配置AO
2023-05-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录