iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spring中怎么管理事务
  • 495
分享到

Spring中怎么管理事务

2023-07-02 17:07:11 495人浏览 泡泡鱼
摘要

今天小编给大家分享一下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中怎么管理事务”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网精选频道。

--结束END--

本文标题: Spring中怎么管理事务

本文链接: https://www.lsjlt.com/news/343302.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • Spring中怎么管理事务
    今天小编给大家分享一下Spring中怎么管理事务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是事务一个数据库事务是一个...
    99+
    2023-07-02
  • spring怎么实现事务管理
    Spring框架提供了多种方式来实现事务管理。下面是几种常见的方式:1. 声明式事务管理:使用Spring的事务管理器和注解或XML...
    99+
    2023-09-28
    spring
  • Spring事务管理怎么正确使用
    这篇文章主要介绍“Spring事务管理怎么正确使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring事务管理怎么正确使用”文章能帮助大家解决问题。事务(Transaction)是访问数据库的...
    99+
    2023-07-05
  • 怎么理解PostgreSQL事务管理中的子事务
    本篇内容主要讲解“怎么理解PostgreSQL事务管理中的子事务”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解PostgreSQL事务管理中的子事务”吧...
    99+
    2024-04-02
  • Spring事务管理详细讲解
    目录事务回顾spring事务操作基于注解声明事务@Transactional注解使用事务传播机制事务隔离级别@Transactional其他属性基于XML 声明式事务完全注解开发说明...
    99+
    2022-11-13
    Spring事务管理 Spring事务原理 Spring事务管理机制
  • Spring详细解读事务管理
    目录什么是事务Spring事务配置Spring事务传播行为1. PROPAGATION_REQUIRED2. PROPAGATION_SUPPORTS3. PROPAGATION_R...
    99+
    2024-04-02
  • 深入浅析Java中的Spring事务管理
    深入浅析Java中的Spring事务管理?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。环境与版本本文出来之前的一篇文章中的hibernate的相关lib 外Java事务管理之H...
    99+
    2023-05-31
    java spring ava
  • Spring中事务管理的方式有哪些
    Spring中事务管理的方式有以下几种:1. 编程式事务管理:通过编写代码来管理事务,需要手动开启、提交、回滚事务。可以使用`Pla...
    99+
    2023-09-29
    Spring
  • Spring事务管理中的异常回滚是什么
    目录前言问题场景Spring 管理事务的原理MySQL中的事务管理JDBC中的事务管理Spring中的事务管理Spring中的事务接口到底回滚还是不回滚简明答案什么是执行事务的方法什...
    99+
    2023-02-09
    Spring事务管理异常回滚 Spring异常回滚 Spring事务管理中的异常回滚
  • Spring 事务管理详解及使用
    ✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识...
    99+
    2023-09-02
    spring java mybatis
  • Spring的事务管理你了解吗
    目录1、事务介绍2、事务的四个特性(ACID)3、Spring 事务管理的核心接口4、PlatformTransactionManager 事务管理器5、TransactionSta...
    99+
    2024-04-02
  • Spring事务管理零基础入门
    目录一、简介二、特性(一原持久隔离)2.1 原子性2.2 一致性(类似能量守恒)2.3 隔离性2.4 持久性三、隔离级别3.1 事务级别(从低到高)3.2 常用数据库默认级别:3.3...
    99+
    2024-04-02
  • 详谈Spring框架之事务管理
    一、编程式事务二、声明式事务1、基于XML的事务1.1 Spring配置文件 <!-- 配置c3p0数据源,只是进行了最简单的配置 --> <bean id="dataSource" class="com.mchange...
    99+
    2023-05-31
    spring 框架 事务管理
  • PostgreSQL怎么管理事务
    在 PostgreSQL 中,可以通过以下方法来管理事务: 开始事务:使用 BEGIN 或 START TRANSACTION ...
    99+
    2024-04-09
    PostgreSQL
  • MySQL中怎么进行事务管理
    在MySQL中,可以通过以下方式进行事务管理: 开启事务:使用START TRANSACTION语句或BEGIN语句开启一个新的...
    99+
    2024-04-09
    MySQL
  • 如何在Spring中使用声明式事务管理
    本篇文章为大家展示了如何在Spring中使用声明式事务管理,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。基于TransactionProxyFactoryBean的事务管理配置Spring中配置AO...
    99+
    2023-05-31
    spring 声明式事务管理
  • Spring事务管理下synchronized锁失效问题怎么解决
    这篇文章主要介绍“Spring事务管理下synchronized锁失效问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Spring事务管理下synchronized锁失效问题怎么解决”文章...
    99+
    2023-06-29
  • spring事务管理的优点有哪些
    1. 原子性:Spring事务管理确保在事务范围内的所有操作要么全部成功要么全部失败,保证数据的一致性。2. 一致性:Spring事...
    99+
    2023-09-29
    spring
  • spring学习JdbcTemplate数据库事务管理
    目录spring JdbcTemplate数据库事务管理一、spring 中的事务管理二、spring 事务管理 API三、使用事务管理1. 配置文件2. 类上添加事务注解sprin...
    99+
    2024-04-02
  • 怎么理解PostgreSQL事务管理
    本篇内容介绍了“怎么理解PostgreSQL事务管理”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Th...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作