Spring学习-Spring Tx
一.概述
Spring Tx 全称为 Spring Transaction Management(Spring 事务管理),是 Spring 为 DB 事务管理提供过的一种便捷的接入方式。
二.导入依赖
Step1:在 pom.xml 中导入 spring-tx 依赖
Step:刷新 Maven 依赖,可以看到 spring-tx 联动依赖 spring-core 和 spring-beans 库
三.Spring 目前常用的事务两种机制
- 注解式:通过 @Transactional 注解指定的 public 方法,在外部调用的时候通过 AOP 机制,在方法前后自动开启和提交/回滚事务。
- 回调式:通过 TransactionTemplate 组件,提交一个回调方法,在方法前后自动开启和提交/回滚事务,并提供了对事务状态的人孔控制。
准备工作:
- Step1:新建一个 biz.service 包
- Step2:新建一个 UserService 类
- Step3:在 UserService 类填入预备方法
四.注解式事务管理
优点:简单易用,不侵入业务逻辑代码,不会造成可读性和维护性的下降。
缺点:控制粒度较粗,容易造成大事务;类内部调用无法开启事务,容易掉坑。
场景:独立调用 DAO 层的纯 DB 操作
Step1:手工开启事务管理
Step2:标注需要事务管理的方法
五.回调式事务管理
优点:控制粒度较细,事务的边界可见即所得,不存在类内部调用失效的暗坑。
缺点:侵入业务逻辑代码,可读性和维护性会有少许下降
场景:Service 层的精细跨表多 DB 操作的事务控制
Step1:注入事务管理器 TransactionTemplate(后面简称TM)
Step2:使用TM调用execute或者executeWithoutResult方法,将需要DB事务的代码通过Lambda表达式包裹起来
六.回调式事务管理中的提交和回滚
匿名接口方法回调式
Lambda 表达式
无论是哪种表达形式,都可以通过 TransactionStatus 来手动控制事务的提交或者回滚,一种常见的形式如下:
本文章整理自上课PPT,仅供学习使用
Spring学习-Spring Tx相关推荐
- Spring学习-Spring核心技术(九)
Spring中面向切面编程-AOP 1. AOP概念 2. AOP的功能和目的 3. AOP代理 4. 基于@AspectJ的AOP支持 (1) 启动@AspectJ支持 1) 使用Java配置方法开 ...
- Java 系列之spring学习--spring搭建(一)
一.新建maven项目 二.引入spring jar包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs ...
- spring 学习—spring的相关概念(01)
1.spring 是开源的轻量级的框架 开源的意思是:免费的提供源代码 轻量级的意思是:此框架的使用不需要依赖于其他的东西,可以直接使用 2.spring 核心的主要两个部分 (1)aop: 面向切面 ...
- Spring 学习——Spring AOP——AOP配置篇Advice(有参数传递)
声明通知Advice 配置方式(以前置通知为例子) 方式一 <aop:config> <aop:aspect id="ikAspectAop" ref=" ...
- spring 学习—spring 的ioc底层原理(03)
2.画图分析ioc实现的原理
- spring 学习—spring 的ioc底层原理(02)
IOC的底层原理 1.ioc底层原理使用技术 (1) xml配置文件 (2) dom4j 解决xml (3)工厂设计模式 (4)反射 什么叫做耦合度太高了:就是关联度太紧密了 高内聚与低耦合 高内聚: ...
- spring学习12 -Spring 框架模块以及面试常见问题注解等
以下为spring常见面试问题: 1.Spring 框架中都用到了哪些设计模式? Spring框架中使用到了大量的设计模式,下面列举了比较有代表性的: 代理模式-在AOP和remoting中被用的比较 ...
- Spring学习总结三
Spring框架JdbcTemplate与事务 Spring学习总结三 0.需要的jar包 1.JdbcTemplate模板 1.1.JdbcTemplateAPI的操作 1.1.1.User类 1. ...
- 菜鸟学习Spring——60s配置XML方法实现简单AOP
一.概述. 上一篇博客讲述了用注解的形式实现AOP现在讲述另外一种AOP实现的方式利用XML来实现AOP. 二.代码演示. 准备工作参照上一篇博客<菜鸟学习Spring--60s使用annota ...
最新文章
- tensorflow中的命令行参数介绍
- 分布式配置中心disconf第三部(基于xml配置的实现原理)
- 【Java学习】多线程2
- 【pmcaff】从 Lending Club 的 IPO,我们能学到些什么
- Spring-Cloud中的负载
- windows命令提示符下输入net start/stop mysql发生系统错误5,拒绝访问的解决方法
- [设计模式]策略模式
- 将数组前n个和后m-n个整体逆置的实现
- python微信自动打卡_「微信辅助」吃鸡再也不怕了,Python用wxpy实现微信自动回复...
- graphics | 基础绘图系统(十)——星形图、四瓣图、马赛克图
- dell服务器硬盘锁_服务器十大排行
- 用java编写一个故事的程序_使用Java怎么编写一个递归程序
- Android混淆篇 ijkplayer混淆
- linphone支持 G729
- plist 与 JOSN的解析
- 【微信技术-微信小程序】------- 微信小程序引用阿里巴巴iconfont图标库样式使用说明
- MPB:西湖大学鞠峰组-​​微生物群落定量宏基因组和宏转录组
- JavaScript数组方法大全(分为会不会改变原数组)
- 万里汇WorldFirst个人和企业帐户注册教程(送$25+1%提现费)
- Python正则表达式(regular expression)简介-re模块