基于AOP的声明式事物控制
目录
Spring事务编程概述
基于xml声明式事务控制
事务属性
isolation
timeout
read-only
propagation
全注解开发
Spring事务编程概述
事务是开发中必不可少的东西,使用JDBC开发时,我们使用connection对事务进行控制,使用MyBatis时,我们使用SqlSession对事务进行控制,缺点显而易见,当我们切换数据库访问技术时,事务控制的方式总会变化


基于xml声明式事务控制
结合上面学习的AOP技术,我们可以对Service的方法进行事务的增强
-
目标类:自定义的AccountServiceImpl,内部方法是切点
-
通知类:Spring提供的,通知方法已经定义好的,只需配置
步骤:
1.导入Spring事务的相关的坐标

2.配置目标类AccountServiceImpl
3.使用advisor标签配置切面
(为什么用advisor标签配置切面?)
假设使用aspect的话需要一个通知类,一级配置一系列通知方法标签
而advisor只需要实现接口重写方法就可以,配置简单
<!-- 包扫描 --><context:component-scan base-package="com.xfy"></context:component-scan>
<!-- JDBC.properties --><context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder><!-- 整合Mybatis-->
<!-- SqlSessionFactory --><bean class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"></property></bean>
<!-- mapper --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><property name="basePackage" value="com.xfy.mapper"></property></bean>
<!-- dataSource --><bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"><property name="driverClassName" value="${jdbc.driver}"/><property name="url" value="${jdbc.url}"/><property name="username" value="${jdbc.username}"/><property name="password" value="${jdbc.password}"/></bean>
<!-- 配置平台事务管理器 --><bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property></bean>
<!-- Spring提供好的事务增强(通知)--><tx:advice id="myadvice" transaction-manager="transactionManager"><tx:attributes><tx:method name="*"/></tx:attributes></tx:advice>
<!-- 事务增强的aop --><aop:config>
<!-- 切点 --><aop:pointcut id="transforMoney" expression="execution(void com.xfy.service.impl.AcountServiceImpl.transforMoney(..))"/><aop:advisor advice-ref="myadvice" pointcut-ref="transforMoney"></aop:advisor></aop:config>
其中有注释可以了解一下
<!-- Spring提供好的事务增强(通知)--><tx:advice id="myadvice" transaction-manager="transactionManager"><tx:attributes>
<!-- 配置事务属性 -->
<!-- name:方法名 * 通配符 ( 添加操作 addXXX addYYY addZZZ => add* )-->
<!-- 下面·这个意味着对transforMoney方法配置独属于她的事务属性-->
<!-- 从上往下匹配 匹配到就不往下 --><tx:method name="transforMoney" isolation="READ_COMMITTED" timeout="3" read-only="false" propagation="REQUIRED"/><tx:method name="*"/></tx:attributes></tx:advice>
事务属性
这个补充一下事务属性👍👍👍👍😏
isolation

timeout
超时时间,默认为-1(没有超时时间) 单位:秒(s)😊
read-only
是否只读,查询操作才只读,其他默认
propagation
事务传播行为,解决业务方法调用业务方法(事务嵌套问题)

全注解开发
@Configuration
@ComponentScan(basePackages = {"com.xfy"})
@MapperScan(basePackages = {"com.xfy.mapper"})
@PropertySource("classpath:jdbc.properties")
@EnableTransactionManagement//事务自动管理
public class SpringConfig {@Beanpublic DataSource dataSource(@Value("${jdbc.driver}") String driver,@Value("${jdbc.url}") String url,@Value("${jdbc.username}") String username,@Value("${jdbc.password}") String password){DruidDataSource dataSource=new DruidDataSource();dataSource.setDriverClassName(driver);dataSource.setUrl(url);dataSource.setUsername(username);dataSource.setPassword(password);return dataSource;}@Beanpublic SqlSessionFactoryBean sqlSessionFactoryBean(DataSource dataSource){SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();sqlSessionFactoryBean.setDataSource(dataSource);return sqlSessionFactoryBean;}@Beanpublic DataSourceTransactionManager transactionManager(DataSource dataSource){DataSourceTransactionManager dataSourceTransactionManager=new DataSourceTransactionManager();dataSourceTransactionManager.setDataSource(dataSource);return dataSourceTransactionManager;}
}
相关文章:
基于AOP的声明式事物控制
目录 Spring事务编程概述 基于xml声明式事务控制 事务属性 isolation timeout read-only propagation 全注解开发 Spring事务编程概述 事务是开发中必不可少的东西,使用JDBC开发时,我们使用connection对事务进行控制,使用MyBatis时&a…...
第七节HarmonyOS UIAbility生命周期以及启动模式
一、UIAbility生命周期 为了实现多设备形态上的裁剪和多窗口的可扩展性,系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态,WindowStageCreate和WindowStageDestroy为窗口管理器(…...
matlab设置背景颜色
matlab默认的背景颜色是纯白RGB(255,255,255),纯白太刺眼,看久了,眼睛会酸胀、疼痛,将其改成豆沙绿RGB(205,123,90),或者给出浅绿色RGB(128,255,255), 颜色就会柔和很多,眼睛感觉更舒适。 下面介绍在…...
Linux gzip命令用法详解:如何压缩和解压文件(附实例教程和注意事项)
Linux gzip命令介绍 Linux gzip命令用于压缩文件。它可以减小文件的大小以节省磁盘空间,并且可以通过gzip命令将多个文件合并成一个压缩文件。 Linux gzip命令适用的Linux版本 Linux gzip命令可以在多数Linux发行版(如Debian、Ubuntu、Alpine、Arch L…...
初刷leetcode题目(11)——数据结构与算法
😶🌫️😶🌫️😶🌫️😶🌫️Take your time ! 😶🌫️😶🌫️😶🌫️😶🌫️…...
基于SSM框架的图书馆管理系统设计与实现
基于SSM框架的图书馆管理系统 摘要:在21信息时代中,编程技术的日益成熟,计算机已经是普通使用的。编程技术的实现是基于计算机硬件上,计算机科学与技术的进步,让时代发展的更快,更加信息化。人们都是学习如…...
【面试】css预处理器之sass(scss)
目录 为什么引入css预处理器 可读性 嵌套:关系明朗 选择器 属性 伪类‘’ 变量:语义明确 默认变量:美元符号 $ 变量名:值 !default 全局变量::global { $global-x: } 变量插值:#{} map键值对:$…...
Android设计模式--享元模式
水不激不跃,人不激不奋 一,定义 使用共享对象可有效地支持大量的细粒度的对象 享元模式是对象池的一种实现,用来尽可能减少内存使用量,它适合用于可能存在大量重复对象的场景,来缓存可共享的对象,达到对象…...
人工智能对我们的生活影响有多大
人工智能给我们的生活带来了巨大的影响!它像魔术师一样,帮我们解决问题、提供建议,甚至预测未来。从智能手机到智能家居,人工智能让我们的生活变得更便捷、更智能。它是我们生活中的得力助手,让我们感受到科技的魅力&a…...
【蓝桥杯选拔赛真题26】C++字符串逆序 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析
目录 C/C++字符串逆序 一、题目要求 1、编程实现 2、输入输出 二、算法分析...
antd vue a-select 下拉框位置偏移
问题 下拉框未固定 原因 select下拉框的定位是根据body定位 解决方法 在select 标签中添加: :getPopupContainer"(triggerNode) > (triggerNode.parentElement)" :getPopupContainer"(triggerNode) > (triggerNode.parentElement)"…...
Windows10免安装PostgreSQL
1. PostgreSQL简介2. 下载3. 安装环境4. 安装 4.1. 初始化数据库4.2. 启动数据库4.3. 注册服务4.3. 卸载服务 1. PostgreSQL简介 PostgreSQL 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统,是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关…...
lua_next
lua_pushnil(L);while(lua_next(L, -2)){// 栈状态:key : -2 value : -1// do something lua_pop(L, 1);} lua_next 先弹出一个值, 再放一对pair 到栈上, 参数 index 是表的位置 调用后: -1:value -2:key 因为会先…...
svn服务端安装
1.下载svn 2.创建一个文件夹 /usr/svn/dev 3.svnadmin create /usr/svn/dev 4.修改/usr/svn/dev/config下的目录的配置文件 authz:权限配置文件,控制读写权限passwd:账号密码配置文件svnserve.conf:svn服务器配置文件 修改svnse…...
基于C#实现十字链表
上一篇我们看了矩阵的顺序存储,这篇我们再看看一种链式存储方法“十字链表”,当然目的都是一样,压缩空间。 一、概念 既然要用链表节点来模拟矩阵中的非零元素,肯定需要如下 5 个元素(row,col,val,down,right),其中&…...
【MySQL】常用内置函数:数值函数 / 字符串函数 / 日期函数 / 其他函数
文章目录 数值函数round():四舍五入ceiling():上限函数floor():地板函数abs():计算绝对值rand():生成0-1的随机浮点数 字符串函数length():获取字符串中的字符数upper() / lower():将字符串转化…...
Python内置函数与标准库函数的详细解读
一、内置函数与标准库函数的区分 Python 解释器自带的函数叫做内置函数,这些函数可以直接使用,不需要导入某个模块。 Python 解释器也是一个程序,它给用户提供了一些常用功能,并给它们起了独一无二的名字,这些常用功能…...
计算机应用基础_错题集_Internet应用1---网络教育统考工作笔记004
5、下面关于搜索引擎的说法,不正确的是____。 A.搜索引擎既是用于检索的软件,又是提供查询﹑检索的网站 B.搜索引擎按其工作方式分为两类:全文搜索引擎和基于关键词的搜索引擎 C.现在很多搜索引擎提供网页快照的功能,当这个网页被删除或链接失效时,用户仍可使用网页快照…...
STM32之定时器--超声波测距
1、模块介绍 型号:HC-SR04 超声波测距模块是用来测量距离的一种产品,通过发送和收超声波,利用时间差和声音传播速度, 计算出模块到前方障碍物的距离。 2、超声波模块的使用方法 怎么让它发送波 Trig ,给Trig端口至…...
微信小程序 老年人心血管健康知识科普系统
本系统的功能有管理员:个人中心,用户管理,热点信息管理,疾病管理,疾病类型管理,治疗管理,治疗类型管理,护理管理,护理类型管理,科普管理,科普类型…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
UDP(Echoserver)
网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法:netstat [选项] 功能:查看网络状态 常用选项: n 拒绝显示别名&#…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
关于 WASM:1. WASM 基础原理
一、WASM 简介 1.1 WebAssembly 是什么? WebAssembly(WASM) 是一种能在现代浏览器中高效运行的二进制指令格式,它不是传统的编程语言,而是一种 低级字节码格式,可由高级语言(如 C、C、Rust&am…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
