前言

spring 对事务管理分为编程式事务管理和声明式事务管理。
1. 编程式事务管理:
使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。
对于编程式事务管理,spring推荐使用TransactionTemplate。
2. 声明式事务管理:
声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务

声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于 @Transactional注解。基于注解的方式更简单易用。

@Transactional的使用

在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。
如何改变默认规则:

  1. 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

    Spring中的@Transactional(rollbackFor = Exception.class)事务处理,当你的方法中抛出异常时,它会将
    事务回滚,数据库中的数据将不会改变,也就是回到进入此方法前的状态。
    
  2. 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

  3. 不需要事务管理的(只查询的)方法:@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对事务的操作相关推荐

  1. 【Spring】事务

    [Spring]事务 文章目录 [Spring]事务 一.概念 1.什么是事务 2.事务的四个特性(ACID) 二.事务操作 1.基本流程 2.Spring 事务管理介绍 3.声明式事务管理(基于注解 ...

  2. 【Spring】事务控制API

    Spring事务控制需要明确 1. JavaEE体系进行分层开发,事务处理位于业务层,Spring提供了分层设计==业务层==的事务处理解决方案. 2. Spring框架提供了一组事务控制的接口.在S ...

  3. spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务

    原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非 ...

  4. spring+mybatis事务的readonly属性无效

    在Spring配置事务中设置的read-only="true"不起作用,仍可以执行写操作:但是其他的正常. 查看了一下DataSourceTransactionManager这个类 ...

  5. Spring研究笔记------事务探究

    2019独角兽企业重金招聘Python工程师标准>>> 最近看了比较多Spring的东西,脑中概念知识比较杂乱,借助周六周天的闲暇时间,写一些内容,梳理一下自己脑中的概念,也以此作为 ...

  6. 使用动态代理简单模拟一下spring的事务管理

    按照平时写代码的习惯,我们会定义一个service接口 package com.proxy.test; public interface UserService {public void sayHel ...

  7. spring注解事务

    2019独角兽企业重金招聘Python工程师标准>>> spring注解事务 <!-- 配置事务管理器 --><bean id="transactionM ...

  8. Spring的事务管理1

    事务的回顾: 事务:逻辑上的一组操作,组成这组事务的各个单元,要么全部成功,要么全部失败 事务的特性:ACID 原子性(Atomicity):事务不可分割 一致性(Consistency):事务执行前 ...

  9. Spring JDBC-Spring事务管理之数据库事务基础知识

    概述 数据库事务的概念 原子性 一致性 隔离性 持久性 数据并发的问题 脏读dirty read 不可重复读unrepeatable read 幻象读 phantom read 幻象读和不可重复度的区 ...

最新文章

  1. torch 的 unsqueeze用法
  2. 三十、Java 多线程编程(上篇)
  3. 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
  4. 题解-ZeroJudge-c686 高斯符號
  5. zabbix-server添加了网络设备模板导致boot.log占满根目录不能ssh登陆
  6. 安装vs2008之后系统好像变慢了?
  7. python提取图像像素值 行号列号,x,y坐标关系
  8. 中国石油大学(北京)-《 修井工程》第二阶段在线作业
  9. 给计算机e盘加密,win10系统给e盘加密的操作方法
  10. OPPO 数据湖统一存储技术实践
  11. 定积分的基本性质5 区间可加性
  12. chrome提示代理(https://....)要求提供用户名和密码
  13. 计算机其他图标删除,我的电脑其他图标删除方法介绍
  14. 腾讯会议共享屏幕播放PPT的时候可以实现只能在自己电脑上可以看到PPT的备注么?
  15. PPT卡死了?只需要这几个小技巧,瞬间帮你提速!
  16. c语言程序设计专题实验bmp,C语言程序设计实验大纲.doc
  17. 计算机病毒发作的后果,计算机病毒和危害
  18. java程序员培训学院,年薪60W必备
  19. 成功解决keil识别不到单片机芯片,下载不了程序
  20. Android环信即时通信集成全过程(含demo)

热门文章

  1. python3编程入门解压码_Python编程入门(第3版) PDF|百度网盘下载内附提取码
  2. 飞信,你真的安全吗?
  3. android测试红米note2图片显示变小,【小米红米Note2评测】MIUI 7细节变化大于界面变化_小米 红米Note2_手机评测-中关村在线...
  4. ACdream 1125 ACfun
  5. dll是什么,简单理解,dll怎么用,动态链接库的优缺点,dll与exe的区别
  6. 【招聘会】自己到底值多少?
  7. Linux服务器命令行上传数据到百度云盘
  8. 免费送百度网盘扩展2T教程
  9. Photoshop 2020 for Mac 打开图片黑屏不显示的解决方法
  10. 解决“psycopg2.errors.InsufficientPrivilege: permission denied for table”问题