IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring与SpringBoot里的事务操作 -> 正文阅读

[Java知识库]Spring与SpringBoot里的事务操作

一:Spring

1.XML配置

首先我们知道spring事务底层是通过aop实现的,所以Spring里的事务配置与aop配置基本一样

(1)配置切面(advisor)

切面有两个必要元素,分别是切入点表达式通知

<aop:config>
	<aop:advisor advice-ref="txadvice" point-ref="tx"/>	//配置切面
 </aop:config>

(2)通过通知,指定哪些方法为事务方法以及设置事务属性(事务管理器也是在通知里面指定)。(给方法添加事务功能也算是一种增强)

<tx:advice id="txadvice">
	<tx:attributes>
	//指定哪些方法做事务的增强(name参数为要添加事务控制的方法名,也可以是结合定位符
	如account*代表account开头的方法名)
	<tx:method name="方法名" propagatin="REQUIRED"/>
	</tx:attributes>
</tx:advice>

<aop:config>
		//配置切面
		<aop:advisor advice-ref="txadvice" point-ref="tx"/>
 </aop:config>

(3)通过切入点表达式指定需要增强的对象(与<tx:method>不同的是,切入点表达式指定的是大致的范围,也就是通知织入的大致位置,具体是哪个方法是由<tx:method>指定的

<tx:advice id="txadvice">
	<tx:attributes>
	//指定哪些方法做事务的增强(name参数为要添加事务控制的方法名,也可以是结合定位符
	如account*代表account开头的方法名)
	<tx:method name="方法名" propagatin="REQUIRED"/>
	</tx:attributes>
</tx:advice>

<aop:config>		
    //配置切点
	<aop:pointcut id="tx" expression="切入点表达式"/>
    //配置切面
	<aop:advisor advice-ref="txadvice" point-ref="tx"/>
 </aop:config>

2.注解方式

? ? ? ? (1)创建事务管理器并指定数据源(放进容器)

? ? ? ? (2)开启注解驱动并指定事务管理器<mvc:annotation-driven?transaction-manager="xxx">

? ? ? ? ?(3)使用@Transaction注解指定事务方法,该注解可以指定隔离界别与传播行为

二:SpringBoot

? ? ? ? 1.XML配置

? ? ? ? ? ? ? ? 与Spring一样,可通过@importResource导入XML配置

? ? ? ? 2.注解方式

? ? ? ? ? ? ? ? (1)在启动类上添加@EnableTransactionManagement开启事务支持

? ? ? ? ? ? ? ? (2)事务方法上添加@Transactional指定事务方法

三:SpringBoot的事务配置中为什么不需要指定数据源?为什么不需要常见事务管理器?

? ? ? ? SpringBoot中一般通过如Druid自动配置类(引入starterJ就会引入自动配置类),创建一个特定类型的数据源并交由容器管理。而SpringBoot又会通过DataSource事务管理器自动配置类,自动从容器中获得一个数据源实例化事务管理器(引入jdbc-startet依赖就会引入该事务管理器自动配置类)

四:Spring事务传播行为(7种)

? ? ? ?通俗点讲,SpringBoot传播行为就是为了解决当一个事务方法调用另外一个事务方法,则这两个事务如何去判定边界,即如何处理的问题。同时也给出了当多个事务方法面临回滚时的处理策略

? ? ? ? 1.REQUIRED:调用者如果是事务方法,则被调用者的事务加入调用者的事务,也就是加入当前事务;如果调用者不是事务方法,则被调用者自己新创建一个独立的事务(可以理解为内部事务被需要,外部有则加入,无则自己新建)

? ? ? ? 2.REQUIRE_NEW:无论调用者是否事务方法,被调用者都会创建一个新的独立的事务(可以理解为新建型需要)

? ? ? ? 3.NESTED:如果调用者时事务方法,则被调用者的事务作为该调用者的事务的子事务,如果调用者不是事务方法,被调用者就自己创建一个新的事务(可以理解为嵌套型需要)

? ? ? ? 4.SUPPORTS:如果调用者是事务方法,则被调用者的事务加入调用者的事务中,如果被调用者不是事务方法,则被调用者也不启动事务(可以理解为支持外部事务的策略,有就加入,无也不新建)

? ? ? ? 5.NOT_SUPPORTS:无论调用者是否事务方法,被调用者都不启动事务(不支持外部事务)

? ? ? ? 6.MANDATORY:如果调用者是事务方法,则被调用者的事务加入该事务;如果调用者不是事务方法,则报错(可以理解为强制外部方法是事务方法)

? ? ? ? 7.NEVER:不使用事务,外部方法是事务方法就报错

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-24 00:21:19  更:2022-03-24 00:21:50 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:18:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码