当前位置: 首页 > news >正文

基于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事务编程概述 事务是开发中必不可少的东西&#xff0c;使用JDBC开发时&#xff0c;我们使用connection对事务进行控制&#xff0c;使用MyBatis时&a…...

第七节HarmonyOS UIAbility生命周期以及启动模式

一、UIAbility生命周期 为了实现多设备形态上的裁剪和多窗口的可扩展性&#xff0c;系统对组件管理和窗口管理进行了解耦。UIAbility的生命周期包括Create、Foreground、Background、Destroy四个状态&#xff0c;WindowStageCreate和WindowStageDestroy为窗口管理器&#xff08…...

matlab设置背景颜色

matlab默认的背景颜色是纯白RGB(255,255,255)&#xff0c;纯白太刺眼&#xff0c;看久了&#xff0c;眼睛会酸胀、疼痛&#xff0c;将其改成豆沙绿RGB(205,123,90)&#xff0c;或者给出浅绿色RGB(128,255,255), 颜色就会柔和很多&#xff0c;眼睛感觉更舒适。     下面介绍在…...

Linux gzip命令用法详解:如何压缩和解压文件(附实例教程和注意事项)

Linux gzip命令介绍 Linux gzip命令用于压缩文件。它可以减小文件的大小以节省磁盘空间&#xff0c;并且可以通过gzip命令将多个文件合并成一个压缩文件。 Linux gzip命令适用的Linux版本 Linux gzip命令可以在多数Linux发行版&#xff08;如Debian、Ubuntu、Alpine、Arch L…...

初刷leetcode题目(11)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…...

基于SSM框架的图书馆管理系统设计与实现

基于SSM框架的图书馆管理系统 摘要&#xff1a;在21信息时代中&#xff0c;编程技术的日益成熟&#xff0c;计算机已经是普通使用的。编程技术的实现是基于计算机硬件上&#xff0c;计算机科学与技术的进步&#xff0c;让时代发展的更快&#xff0c;更加信息化。人们都是学习如…...

【面试】css预处理器之sass(scss)

目录 为什么引入css预处理器 可读性 嵌套&#xff1a;关系明朗 选择器 属性 伪类‘’ 变量&#xff1a;语义明确 默认变量&#xff1a;美元符号 $ 变量名:值 !default 全局变量&#xff1a;:global { $global-x: } 变量插值&#xff1a;#{} map键值对&#xff1a;$…...

Android设计模式--享元模式

水不激不跃&#xff0c;人不激不奋 一&#xff0c;定义 使用共享对象可有效地支持大量的细粒度的对象 享元模式是对象池的一种实现&#xff0c;用来尽可能减少内存使用量&#xff0c;它适合用于可能存在大量重复对象的场景&#xff0c;来缓存可共享的对象&#xff0c;达到对象…...

人工智能对我们的生活影响有多大

人工智能给我们的生活带来了巨大的影响&#xff01;它像魔术师一样&#xff0c;帮我们解决问题、提供建议&#xff0c;甚至预测未来。从智能手机到智能家居&#xff0c;人工智能让我们的生活变得更便捷、更智能。它是我们生活中的得力助手&#xff0c;让我们感受到科技的魅力&a…...

【蓝桥杯选拔赛真题26】C++字符串逆序 第十三届蓝桥杯青少年创意编程大赛C++编程选拔赛真题解析

目录 C/C++字符串逆序 一、题目要求 1、编程实现 2、输入输出 二、算法分析...

antd vue a-select 下拉框位置偏移

问题 下拉框未固定 原因 select下拉框的定位是根据body定位 解决方法 在select 标签中添加&#xff1a; :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 是一种特性非常齐全的自由软件的对象-关系型数据库管理系统&#xff0c;是以加州大学计算机系开发的 POSTGRES 4.2版本为基础的对象关…...

lua_next

lua_pushnil(L);while(lua_next(L, -2)){// 栈状态&#xff1a;key : -2 value : -1// do something lua_pop(L, 1);} lua_next 先弹出一个值&#xff0c; 再放一对pair 到栈上&#xff0c; 参数 index 是表的位置 调用后&#xff1a; -1&#xff1a;value -2:key 因为会先…...

svn服务端安装

1.下载svn 2.创建一个文件夹 /usr/svn/dev 3.svnadmin create /usr/svn/dev 4.修改/usr/svn/dev/config下的目录的配置文件 authz&#xff1a;权限配置文件&#xff0c;控制读写权限passwd&#xff1a;账号密码配置文件svnserve.conf&#xff1a;svn服务器配置文件 修改svnse…...

基于C#实现十字链表

上一篇我们看了矩阵的顺序存储&#xff0c;这篇我们再看看一种链式存储方法“十字链表”&#xff0c;当然目的都是一样&#xff0c;压缩空间。 一、概念 既然要用链表节点来模拟矩阵中的非零元素&#xff0c;肯定需要如下 5 个元素(row,col,val,down,right)&#xff0c;其中&…...

【MySQL】常用内置函数:数值函数 / 字符串函数 / 日期函数 / 其他函数

文章目录 数值函数round()&#xff1a;四舍五入ceiling()&#xff1a;上限函数floor()&#xff1a;地板函数abs()&#xff1a;计算绝对值rand()&#xff1a;生成0-1的随机浮点数 字符串函数length()&#xff1a;获取字符串中的字符数upper() / lower()&#xff1a;将字符串转化…...

Python内置函数与标准库函数的详细解读

一、内置函数与标准库函数的区分 Python 解释器自带的函数叫做内置函数&#xff0c;这些函数可以直接使用&#xff0c;不需要导入某个模块。 Python 解释器也是一个程序&#xff0c;它给用户提供了一些常用功能&#xff0c;并给它们起了独一无二的名字&#xff0c;这些常用功能…...

计算机应用基础_错题集_Internet应用1---网络教育统考工作笔记004

5、下面关于搜索引擎的说法,不正确的是____。 A.搜索引擎既是用于检索的软件,又是提供查询﹑检索的网站 B.搜索引擎按其工作方式分为两类:全文搜索引擎和基于关键词的搜索引擎 C.现在很多搜索引擎提供网页快照的功能,当这个网页被删除或链接失效时,用户仍可使用网页快照…...

STM32之定时器--超声波测距

1、模块介绍 型号&#xff1a;HC-SR04 超声波测距模块是用来测量距离的一种产品&#xff0c;通过发送和收超声波&#xff0c;利用时间差和声音传播速度&#xff0c; 计算出模块到前方障碍物的距离。 2、超声波模块的使用方法 怎么让它发送波 Trig &#xff0c;给Trig端口至…...

微信小程序 老年人心血管健康知识科普系统

本系统的功能有管理员&#xff1a;个人中心&#xff0c;用户管理&#xff0c;热点信息管理&#xff0c;疾病管理&#xff0c;疾病类型管理&#xff0c;治疗管理&#xff0c;治疗类型管理&#xff0c;护理管理&#xff0c;护理类型管理&#xff0c;科普管理&#xff0c;科普类型…...

别再乱用分支了!Flowable四种网关(排他/并行/包容/事件)实战选型指南

Flowable四大网关实战选型&#xff1a;从混乱到精准的决策艺术当你在设计一个请假审批流程时&#xff0c;是否遇到过这样的困惑&#xff1a;部门经理审批后需要同时通知HR和财务&#xff0c;但某些特殊情况下又需要跳过财务直接归档&#xff1f;这种看似简单的业务需求&#xf…...

告别拍脑袋规划!用ArcGIS做绿道选线:如何科学量化坡度、水域、道路成本并加权计算

科学规划绿道的ArcGIS高阶技法&#xff1a;从成本栅格构建到最优路径生成绿道规划从来不是简单的"两点之间直线最短"&#xff0c;而是需要综合考虑地形、生态、人文等多维因素的复杂决策过程。传统规划中常见的"拍脑袋"决策方式&#xff0c;往往导致建成后…...

服务器日志分析实战:用Python追踪HTTP 404错误并可视化异常频率

作为一名爬虫开发者或网站运维人员,服务器日志就像飞机的“黑匣子”——它记录了每个请求的来龙去脉。而404错误(页面未找到)尤其值得关注:它可能是用户输错了网址,可能是你爬虫的URL构造逻辑有漏洞,也可能是网站改版后旧的链接失效了。更严重的是,大量突然涌出的404请求…...

Python合并Excel文档

有若干个Excel文档&#xff0c;每个文档格式一致&#xff0c;及第一行为文件标题&#xff0c;第二行为表格表头&#xff08;表头不完全一致&#xff09;。现需要将他们合并。合并规则为&#xff1a;去掉每个文档的第一行&#xff0c;以第二行为表头&#xff0c;将每个文档的第三…...

OpenClaw用户如何快速接入Taotoken并开始Agent工作流

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 OpenClaw用户如何快速接入Taotoken并开始Agent工作流 对于使用OpenClaw框架构建AI智能体的开发者而言&#xff0c;快速接入稳定、多…...

荣耀出征官方网站下载正版手游 翅膀养成细节玩法全方位讲解

玩荣耀出征的玩家都清楚&#xff0c;翅膀不仅是角色的颜值象征&#xff0c;更是提升整体战力的核心途径。很多新手玩家只顾着升级、刷装备&#xff0c;完全忽略翅膀养成&#xff0c;导致等级很高但战力始终上不去。还有不少玩家胡乱合成、盲目进阶&#xff0c;浪费了大量稀有翅…...

DAIR-V2X-V数据集深度评测:与KITTI、nuScenes比,它到底强在哪?

DAIR-V2X-V数据集深度评测&#xff1a;与KITTI、nuScenes比&#xff0c;它到底强在哪&#xff1f; 当技术团队着手开发面向中国道路的自动驾驶系统时&#xff0c;数据集的选择往往成为第一个关键决策点。过去十年间&#xff0c;KITTI和nuScenes等国际数据集一直是行业标杆&…...

输电线路在线监测系统|架空线路安全运行的“第一道防线“!

输电线路微气象监测站是专为高压输电线路、电网廊道、杆塔运维量身打造的专利级一体化微气象智能监测设备。依托双专利超声波探测技术、六要素集成传感架构、无启动风速高精测量、智能抗干扰稳控系统&#xff0c;实现输电线路沿线气象24小时全自动捕捉、动态实时监测、大风风险…...

Go开发者必备:circuitbreaker API全解析与最佳实践指南 [特殊字符]

Go开发者必备&#xff1a;circuitbreaker API全解析与最佳实践指南 &#x1f680; 【免费下载链接】circuitbreaker Circuit Breakers in Go 项目地址: https://gitcode.com/gh_mirrors/circ/circuitbreaker 作为一名Go开发者&#xff0c;你是否经常遇到远程服务调用失败…...

ComfyUI-Manager完全指南:掌握AI工作流管理的核心技术

ComfyUI-Manager完全指南&#xff1a;掌握AI工作流管理的核心技术 【免费下载链接】ComfyUI-Manager ComfyUI-Manager is an extension designed to enhance the usability of ComfyUI. It offers management functions to install, remove, disable, and enable various custo…...