spring事务(三)
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事务(三)相关推荐
- 事务超时时间无效_Java面试题:Spring事务面试考点的集合整理。建议收藏阅读...
Spring和事务的关系 关系型数据库.某些消息队列等产品或中间件称为事务性资源,因为它们本身支持事务,也能够处理事务. Spring很显然不是事务性资源,但是它可以管理事务性资源,所以Spring和 ...
- Spring事务及其注解
Spring事务及其注解目录页 Spring事务相关 Spring事务的本质 Spring和事务的关系 Spring事务三要素 Spring事务的注解配置 事务注解的本质 Spring事务的表达方式 ...
- Spring事务专题(三)事务的基本概念,Mysql事务处理原理
我重新整理了大纲,思考了很久,决定单独将MySQL的事务实现原理跟Spring中的事务示例分为两篇文章,因为二者毕竟没有什么实际关系,实际上如果你对MySQL的事务原理不感兴趣也可以直接跳过本文,等待 ...
- 事务里面捕获异常_三问Spring事务:解决什么问题?如何解决?存在什么问题?...
1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?". 事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组 ...
- 事务回滚什么意思 try_三问Spring事务:解决什么问题?如何解决?存在什么问题?...
1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?".事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组成 ...
- Spring事务管理(三)-PlatformmTransactionManager解析和事务传播方式原理
2019独角兽企业重金招聘Python工程师标准>>> Spring在事务管理时,对事务的处理做了极致的抽象,即PlatformTransactionManager.对事务的操作,简 ...
- 三问Spring事务:解决什么问题?如何解决?存在什么问题?
1. 解决什么问题 让我们先从事务说起,"什么是事务?我们为什么需要事务?".事务是一组无法被分割的操作,要么所有操作全部成功,要么全部失败.我们在开发中需要通过事务将一些操作组成 ...
- 《深入理解分布式事务》第三章 Spring 事务的实现原理
<深入理解分布式事务>第三章 Spring 事务的实现原理 文章目录 <深入理解分布式事务>第三章 Spring 事务的实现原理 一.Spring 事务原理 1.JDBC 直接 ...
- Spring的4种事务管理(1种编程式事务+三种声明事务)
2019独角兽企业重金招聘Python工程师标准>>> Spring的4种事务管理(1种编程式事务+三种声明事务) 一.Spring事务的介绍 二.编程式事务xml的配置 注入后直接 ...
- Spring的三种事务控制
Spring的三种方式的事务控制 1:基于编程式的事务控制 1.1:编程式事务控制相关对象 PlatformTransactionManager接口是spring的事务管理器,他里面提供了我们常用的操 ...
最新文章
- stm32之spi之NSS管脚信号
- java for loop_Java for循环执行了两次
- 标题:浅析图卷积神经网络
- 《精通Windows Sockets网络开发--基于Visual C++实现》.(孙海民).[PDF]ckook
- 基于XML配置方式实现对action的所有方法进行校验
- DPDK l2fwd收发包思维导图
- 我的世界等价交换卡服务器物品,【推荐服务器】等价交换|加速火把|工业|神秘|植物|AE|食物工艺等......
- 【补】day3 table标签
- Bootstrap-分页插件Paginator
- C/C++获取Windows系统CPU和内存及硬盘使用情况
- 程序员常见面试逻辑智力题(笔试题)附参考答案
- 分享盒子直播软件.已测试,网络机顶盒看电视直播哪个软件好(最好用的三款免费直播软件分享)...
- OneNote使用技巧 - 7.一键修改字体样式大小(Onestatic宏插件使用,附常用宏命令代码)
- UEFI Specification 第一章 引言(基于UEFI_Spec_2_9_2021_03_18)
- SSH远程ubuntu【无公网IP、内网穿透】 1-3
- Algorithm之PrA:PrA之IP整数规划(包括0-1整数规划)算法经典案例剖析+Matlab编程实现
- Android 模拟手指滑动
- 如何使用计算机画出函数模型,函数模型
- php fopen 指定路径,fopen 系统找不到指定路径 PHP文件包含详细讲述
- 利用 GitHub 从零开始搭建一个博客