Spring对事务的操作
前言
spring 对事务管理分为编程式事务管理和声明式事务管理。
1. 编程式事务管理:
使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。
对于编程式事务管理,spring推荐使用TransactionTemplate。
2. 声明式事务管理:
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务 。
声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于 @Transactional注解。基于注解的方式更简单易用。
@Transactional的使用
在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。
如何改变默认规则:
让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)
Spring中的@Transactional(rollbackFor = Exception.class)事务处理,当你的方法中抛出异常时,它会将 事务回滚,数据库中的数据将不会改变,也就是回到进入此方法前的状态。
让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)
不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)
注意: 如果异常被try{}catch{}了,事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}。
@Transactional的属性
项目 | Value | Value |
---|---|---|
value | String | 可选的限定描述符,指定使用的事务管理器 |
propagation | enum: Propagation | 可选的事务传播行为设置 |
isolation | enum: Isolation | 可选的事务隔离级别设置 |
readOnly | boolean | 读写或只读事务,默认读写 |
timeout | int (in seconds granularity) | 事务超时时间设置 |
rollbackFor | Class对象数组,必须继承自Throwable | 导致事务回滚的异常类数组 |
rollbackForClassName | 类名数组,必须继承自Throwable | 导致事务回滚的异常类名字数组 |
noRollbackFor | Class对象数组,必须继承自Throwable | 不会导致事务回滚的异常类数组 |
noRollbackForClassName | 类名数组,必须继承自Throwable | 不会导致事务回滚的异常类名字数组 |
Spring对事务的操作相关推荐
- 【Spring】事务
[Spring]事务 文章目录 [Spring]事务 一.概念 1.什么是事务 2.事务的四个特性(ACID) 二.事务操作 1.基本流程 2.Spring 事务管理介绍 3.声明式事务管理(基于注解 ...
- 【Spring】事务控制API
Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...
- spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非 ...
- spring+mybatis事务的readonly属性无效
在Spring配置事务中设置的read-only="true"不起作用,仍可以执行写操作:但是其他的正常. 查看了一下DataSourceTransactionManager这个类 ...
- Spring研究笔记------事务探究
2019独角兽企业重金招聘Python工程师标准>>> 最近看了比较多Spring的东西,脑中概念知识比较杂乱,借助周六周天的闲暇时间,写一些内容,梳理一下自己脑中的概念,也以此作为 ...
- 使用动态代理简单模拟一下spring的事务管理
按照平时写代码的习惯,我们会定义一个service接口 package com.proxy.test; public interface UserService {public void sayHel ...
- spring注解事务
2019独角兽企业重金招聘Python工程师标准>>> spring注解事务 <!-- 配置事务管理器 --><bean id="transactionM ...
- Spring的事务管理1
事务的回顾: 事务:逻辑上的一组操作,组成这组事务的各个单元,要么全部成功,要么全部失败 事务的特性:ACID 原子性(Atomicity):事务不可分割 一致性(Consistency):事务执行前 ...
- Spring JDBC-Spring事务管理之数据库事务基础知识
概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...
最新文章
- torch 的 unsqueeze用法
- 三十、Java 多线程编程(上篇)
- 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
- 题解-ZeroJudge-c686 高斯符號
- zabbix-server添加了网络设备模板导致boot.log占满根目录不能ssh登陆
- 安装vs2008之后系统好像变慢了?
- python提取图像像素值 行号列号,x,y坐标关系
- 中国石油大学(北京)-《 修井工程》第二阶段在线作业
- 给计算机e盘加密,win10系统给e盘加密的操作方法
- OPPO 数据湖统一存储技术实践
- 定积分的基本性质5 区间可加性
- chrome提示代理(https://....)要求提供用户名和密码
- 计算机其他图标删除,我的电脑其他图标删除方法介绍
- 腾讯会议共享屏幕播放PPT的时候可以实现只能在自己电脑上可以看到PPT的备注么?
- PPT卡死了?只需要这几个小技巧,瞬间帮你提速!
- c语言程序设计专题实验bmp,C语言程序设计实验大纲.doc
- 计算机病毒发作的后果,计算机病毒和危害
- java程序员培训学院,年薪60W必备
- 成功解决keil识别不到单片机芯片,下载不了程序
- Android环信即时通信集成全过程(含demo)
热门文章
- python3编程入门解压码_Python编程入门(第3版) PDF|百度网盘下载内附提取码
- 飞信,你真的安全吗?
- android测试红米note2图片显示变小,【小米红米Note2评测】MIUI 7细节变化大于界面变化_小米 红米Note2_手机评测-中关村在线...
- ACdream 1125 ACfun
- dll是什么,简单理解,dll怎么用,动态链接库的优缺点,dll与exe的区别
- 【招聘会】自己到底值多少?
- Linux服务器命令行上传数据到百度云盘
- 免费送百度网盘扩展2T教程
- Photoshop 2020 for Mac 打开图片黑屏不显示的解决方法
- 解决“psycopg2.errors.InsufficientPrivilege: permission denied for table”问题