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知识库 -> 事务管理(事务控制方式) -> 正文阅读

[Java知识库]事务管理(事务控制方式)

事务控制方式

  • 编程式
  • 声明式(XML)
  • 声明式(注解)

案例介绍

  • 银行转账业务说明
    • 银行转账操作中,涉及到从A账户到B账户的资金转移操作。数据层仅提供单条数据的基础操作,未涉及多账户间的业务操作。

新建7个文件
在这里插入图片描述

内容如下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
运行可见结果
在这里插入图片描述

编程式事务

在AccountServiceImpl里添加如下语句
在这里插入图片描述
在applicationContext.xml里添加这个
在这里插入图片描述
运行可见报错
在这里插入图片描述
此时事务进行了回滚,数据库的值没有变化
在这里插入图片描述

  • 使用spring提供的专用于mybatis的事务管理器在业务层硬编码进行事务管理
  • 业务层要注入dataSource对象

使用AOP控制事务

  • 将业务层的事务处理功能抽取出来制作成AOP通知,利用环绕通知运行期间动态织入

各文件内容
在这里插入图片描述
新建TxAdvice
在这里插入图片描述
内容
在这里插入图片描述
pom文件导入依赖
在这里插入图片描述
applicationContext文件
在这里插入图片描述
文件头部内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd">

运行可见数据库内容变化

  • 将业务层的事务处理功能抽取出来制作成AOP通知,利用环绕通知运行期动态织入

步骤:

  • 配置AOP通知类,并注入dataSource
  • 使用环绕通知将通知类织入到原始业务对象执行过程中

小节

  • 基于AOP思想,抽取通知功能,利用环绕通知动态注入

声明式事务(XML)

在applicationContext里新添头

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        https://www.springframework.org/schema/aop/spring-aop.xsd
        http://www.springframework.org/schema/tx
        https://www.springframework.org/schema/tx/spring-tx.xsd">

aop:advice与aop:advisor区别

  • aop:advice配置的通知类可以是普通的java对象,不实现接口,也不使用继承关系
  • aop:advisor配置的通知类必须实现通知接口
    • MethodBeforeAdvice
    • AfterReturningAdvice
    • ThrowsAdvice

tx配置

  • 名称:tx:advice
  • 类型:标签
  • 归属:beans标签
  • 作用:专用于声明事务通知
  • 格式
<beans>
	<tx:advice id="txAdvice" transaction-manager="txManager">
	</tx:advice>
</beans>
  • 基本属性:
    • id:用于配置aop时指定通知器的id
    • transaction-manager:指定事务管理器bean

tx:method属性

<tx:method
	name="*"
	read-only="false"
	timeout="-1"
	isolation=DEFAULT"
	no-rollback-for=""
	rollback-for=""
	propagetion="REQUIRED"
	/>
  • name:待添加事务的方法名表达式(支持*号通配)
  • read-only:设置事务的读写属性,true为只读,false为读写
  • timeout:设置事务超时时长,单位秒
  • isolation:设置事务隔离级别,该隔离级设定是基于Spring的设定,非数据库端
  • no-rollback-for:设置事务中不回滚的异常,多个异常间使用,号分割
  • rollback-for:设置事务中必回滚的异常,多个异常间使用,号分割
  • propagation:设置事务的传播行为

  • 声明式事务的配置方式
    • 设定事务管理器
    • 专用事务通知器
    • AOP配置切面,使用通知器绑定切入点

事务传播行为

  • 事务管理员
  • 事务协调员
    在这里插入图片描述
  • 事务传播行为修饰的是协调员针对管理员所携带事务的态度
  • 企业开发过程中,发现同属于同一个事务控制的各个业务中,如果某个业务与其他业务隔离度较高,拥有差异化的数据业务控制情况,通常使用事务传播行对其进行控制

声明式事务(注解)

首先把applicationContext.xml里的选中代码删掉
在这里插入图片描述
新添此句
在这里插入图片描述
在AccountServiceImpl里新添@Transactional注解
可以在注解里添加属性
在这里插入图片描述

  • 名称:@Transactional
  • 类型:方法注解,类注解,接口注解
  • 位置:方法定义上方,类定义上方,接口定义上方
  • 作用:设置当前类/接口中所有方法或具体方法开启事务,并指定相关事务属性
  • 范例:
@Transactional(
        readOnly = false,
        timeout = -1,
        isolation = Isolation.DEFAULT,
        rollbackFor = {}, //{java.lang.ArithmeticException.class, IOException.class}
        noRollbackFor = {},
        propagation = Propagation.REQUIRED
)

常用方法是将该注解写在接口方法上,也可以配置在接口上
在这里插入图片描述


  • 名称:tx:annotation-driven
  • 类型:标签
  • 归属:beans标签
  • 作用:开启事务注解驱动,并指定对应的事务管理器
  • 范例:
<tx:annotation-driven transaction-manager="txManager"/>

  • 声明式事务注解方式
    • 开启注解驱动
    • 配置事务属性(@Transactional)
      • 接口(主流)
      • 方法

声明式事务(纯注解驱动)

在AccountDao里新添@Update注解
在这里插入图片描述

删除AccountDao.xml
实现类新增两个注解
在这里插入图片描述
新增三个文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

此时可以删除xml文件直接正常运行了


  • 名称:@EnableTransactionManagement
  • 类型:类注解
  • 位置:Spring注解配置类上方
  • 作用:开启注解驱动,等同XML格式中注解驱动
  • 范例:
@Configuration
@ComponentScan("com.thenema.bank")
@PropertySource("classpath:jdbc.properties")
@Import({JDBCConfig.class,MyBatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}

@Bean
public PlatformTransactionManager getPlatformTransactionManager(DataSource dataSource){
    return new DataSourceTransactionManager(dataSource);
}
  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-27 13:57:03  更:2021-09-27 13:57:35 
 
开发: 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/23 18:53:52-

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