spring事务

spring事务类型

spring支持以下两种事务:

  • 编程式事务
  • 声明式事务

spring编程式事务(不使用)

编程式事务管理是 侵入性事务管理 ,使用TransactionTemplate或者直接使用PlatformTransactionManager接口,对于编程式事务管理,Spring推荐使用TransactionTemplate的实现类。这种入侵性的事务管理我们一般不用,因为这属于硬编码的写法,业务一改,就必须改代码,这是十分不好的。

public class UserService {private final PlatformTransactionManager transactionManager;public UserService(PlatformTransactionManager transactionManager) {this.transactionManager = transactionManager;}public void createUser() {TransactionStatus txStatus =transactionManager.getTransaction(new DefaultTransactionDefinition());try {userMapper.insertUser(user);} catch (Exception e) {transactionManager.rollback(txStatus);throw e;}transactionManager.commit(txStatus);}
}

spring声明式事务

配置事务管理器

属于前置工作,要使用spring的事务管理,需要配置事务管理器。

@Configuration
public class DataSourceConfig {@Beanpublic DataSourceTransactionManager transactionManager() {return new DataSourceTransactionManager(dataSource());}@Beanpublic DataSource dataSource(){....return dataSource;    }
}

spring声明式事务有两种方式,一种是通过xml文件进行配置,一种是通过注解的方式进行配置。我个人比较喜欢使用注解的方式。

相关注解

开启事务管理功能: @EnableTransactionManagement

事务注解: @Transactional

@Transactional

@Transactional 实质是使用了 JDBC 的事务来进行事务控制的,@Transactional 基于 Spring 的AOP

@Transactional的属性

  • name 属性指定选择哪个事务管理器。
  • propagation 事务的传播行为,默认值为 REQUIRED。
  • isolation 事务的隔离度,默认值采用 DEFAULT。
  • timeout 事务的超时时间,默认值为-1。
  • read-only 指定事务是否为只读事务,默认值为 false;
  • rollback-for 用于指定能够触发事务回滚的异常类型
  • no-rollback- for 抛出 no-rollback-for 指定的异常类型,不回滚事务。

事务的隔离度

刚好对应数据库的几个隔离级别,默认是DEFAULT(数据库启用的隔离级别)

@Transactional(isolation = Isolation.READ_UNCOMMITTED):读取未提交数据@Transactional(isolation = Isolation.READ_COMMITTED):读取已提交数据@Transactional(isolation = Isolation.REPEATABLE_READ):可重复读@Transactional(isolation = Isolation.SERIALIZABLE):串行化

事务的传播行为

原文:https://www.cnblogs.com/mseddl/p/11577846.html

  • PROPAGATION_REQUIRED
    Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行
  • PROPAGATION_REQUES_NEW
    该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可
  • PROPAGATION_SUPPORT
    如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务
  • PROPAGATION_NOT_SUPPORT
    该传播机制不支持事务,如果外层存在事务则挂起,执行完当前代码,则恢复外层事务,无论是否异常都不会回滚当前的代码
  • PROPAGATION_NEVER
    该传播机制不支持外层事务,即如果外层有事务就抛出异常
  • PROPAGATION_MANDATORY
    与NEVER相反,如果外层没有事务,则抛出异常
  • PROPAGATION_NESTED
    该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。

spring事务(三)相关推荐

  1. 事务超时时间无效_Java面试题:Spring事务面试考点的集合整理。建议收藏阅读...

    Spring和事务的关系 关系型数据库.某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务. Spring很显然不是事务性资源,但是它可以管理事务性资源,所以Spring和 ...

  2. Spring事务及其注解

    Spring事务及其注解目录页 Spring事务相关 Spring事务的本质 Spring和事务的关系 Spring事务三要素 Spring事务的注解配置 事务注解的本质 Spring事务的表达方式 ...

  3. Spring事务专题(三)事务的基本概念,Mysql事务处理原理

    我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待 ...

  4. 事务里面捕获异常_三问Spring事务:解决什么问题?如何解决?存在什么问题?...

    1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?". 事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组 ...

  5. 事务回滚什么意思 try_三问Spring事务:解决什么问题?如何解决?存在什么问题?...

    1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?".事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组成 ...

  6. Spring事务管理(三)-PlatformmTransactionManager解析和事务传播方式原理

    2019独角兽企业重金招聘Python工程师标准>>> Spring在事务管理时,对事务的处理做了极致的抽象,即PlatformTransactionManager.对事务的操作,简 ...

  7. 三问Spring事务:解决什么问题?如何解决?存在什么问题?

    1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?".事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组成 ...

  8. 《深入理解分布式事务》第三章 Spring 事务的实现原理

    <深入理解分布式事务>第三章 Spring 事务的实现原理 文章目录 <深入理解分布式事务>第三章 Spring 事务的实现原理 一.Spring 事务原理 1.JDBC 直接 ...

  9. Spring的4种事务管理(1种编程式事务+三种声明事务)

    2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...

  10. Spring的三种事务控制

    Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...

最新文章

  1. stm32之spi之NSS管脚信号
  2. java for loop_Java for循环执行了两次
  3. 标题:浅析图卷积神经网络
  4. 《精通Windows Sockets网络开发--基于Visual C++实现》.(孙海民).[PDF]ckook
  5. 基于XML配置方式实现对action的所有方法进行校验
  6. DPDK l2fwd收发包思维导图
  7. 我的世界等价交换卡服务器物品,【推荐服务器】等价交换|加速火把|工业|神秘|植物|AE|食物工艺等......
  8. 【补】day3 table标签
  9. Bootstrap-分页插件Paginator
  10. C/C++获取Windows系统CPU和内存及硬盘使用情况
  11. 程序员常见面试逻辑智力题(笔试题)附参考答案
  12. 分享盒子直播软件.已测试,网络机顶盒看电视直播哪个软件好(最好用的三款免费直播软件分享)...
  13. OneNote使用技巧 - 7.一键修改字体样式大小(Onestatic宏插件使用,附常用宏命令代码)
  14. UEFI Specification 第一章 引言(基于UEFI_Spec_2_9_2021_03_18)
  15. SSH远程ubuntu【无公网IP、内网穿透】 1-3
  16. Algorithm之PrA:PrA之IP整数规划(包括0-1整数规划)算法经典案例剖析+Matlab编程实现
  17. Android 模拟手指滑动
  18. 如何使用计算机画出函数模型,函数模型
  19. php fopen 指定路径,fopen 系统找不到指定路径 PHP文件包含详细讲述
  20. 利用 GitHub 从零开始搭建一个博客

热门文章

  1. android 开发中的常见问题
  2. PetaPoco 使用总结(二)
  3. 共济失调对我们的危害你知道吗
  4. 你的行为合理吗?看看社会心理学给我们的启示。
  5. 解决VS2015 VBCSCompiler.exe 占用CPU100%的问题
  6. kafka集群的搭建
  7. 领域模型驱动设计(Domain Driven Design)入门概述
  8. uWSGI + Nginx + Django 部署
  9. PHP生成日历(实例详解)
  10. PHP(Thinkphp框架)将数据表导出csv文件