Spring.NET教程(十五)——事务传播行为(基础篇)
TransactionProxyFactoryObject的TransactionAttributes属性是用来配置的传播行为,并规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
PROPAGATION_REQUIRED | 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。 |
PROPAGATION_SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
PROPAGATION_MANDATORY | 支持当前事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
PROPAGATION_NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。 |
PROPAGATION_REQUIRED和PROPAGATION_SUPPORTS我用的比较多,其它的很少使用。特别是PROPAGATION_REQUIRED,我绝大多数情况都使用这个行为(如,在创建,删除,修改的时候),我会在查询(获取)数据的时候设置为:PROPAGATION_REQUIRED,readOnly,声明为一个只读事务,这样有助于性能的提高。
TransactionProxyFactoryObject的Target属性是我们要拦截的对象,一般我们设置为业务层的对象。
实现代码:
App.config
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:db="http://www.springframework.net/database">
<db:provider id="DbProvider"
provider="SqlServer-1.1"
connectionString="Server=(local);Database=SpringLesson16;Uid=sa;Pwd=;Trusted_Connection=False"/>
<object id="userDao" type="Dao.UserDao, Dao">
<property name="AdoTemplate" ref="adoTemplate"/>
</object>
<object id="accountDao" type="Dao.AccountDao, Dao">
<property name="AdoTemplate" ref="adoTemplate"/>
</object>
<object id="userService" parent="txProxyTemplate">
<property name="Target">
<object type="Service.UserService, Service">
<property name="UserDao" ref="userDao"/>
<property name="AccountDao" ref="accountDao"/>
</object>
</property>
</object>
<object id="adoTemplate" type="Spring.Data.Core.AdoTemplate, Spring.Data">
<property name="DbProvider" ref="DbProvider"/>
<property name="DataReaderWrapperType" value="Spring.Data.Support.NullMappingDataReader, Spring.Data"/>
</object>
<!--事务管理器-->
<object id="transactionManager"
type="Spring.Data.Core.AdoPlatformTransactionManager, Spring.Data">
<property name="DbProvider" ref="DbProvider"/>
</object>
<object id="txProxyTemplate" abstract="true"
type="Spring.Transaction.Interceptor.TransactionProxyFactoryObject, Spring.Data">
<property name="PlatformTransactionManager" ref="transactionManager"/>
<property name="TransactionAttributes">
<name-values>
<add key="Save*" value="PROPAGATION_REQUIRED"/>
<add key="Delete*" value="PROPAGATION_REQUIRED"/>
<add key="Get*" value="PROPAGATION_REQUIRED,readOnly"/>
</name-values>
</property>
</object>
</objects>
在name-value节点下,key属性为Save*,意思是拦截所有以Save开头的方法,在拦截到的方法上增加PROPAGATION_REQUIRED的事务传播行为。
转载于:https://www.cnblogs.com/millen/archive/2009/12/30/1635979.html
Spring.NET教程(十五)——事务传播行为(基础篇)相关推荐
- 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(二)
前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 上一讲我们说了CubeMX配置SDRAM的一些基本配置,还有FMC跟SDRAM的讲解,这一讲我们 ...
- 【STM32】HAL库 STM32CubeMX教程十五---FMC-SDRAM(一)
前言: 本系列教程将HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用 本文 1首先讲解什么是FMC及SDRAM,W9825G6KH芯片原理,2基于CubeMx创建工程 ...
- 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界 摄像机的实现
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow 本系列文章由zhm ...
- 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现...
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接:http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云(浅墨) ...
- 【Visual C++】游戏开发笔记四十七 浅墨DirectX教程十五 翱翔于三维世界:摄像机的实现
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8657656 作者:毛星云( ...
- 孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备
孤荷凌寒自学python第四十五天Python初学基础基本结束的下阶段预安装准备 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 今天本来应当继续学习Python的数据库操作,但根据过去我自学 ...
- 《深入浅出DPDK》读书笔记(十五):DPDK应用篇(Open vSwitch(OVS)中的DPDK性能加速)
Table of Contents Open vSwitch(OVS)中的DPDK性能加速 174.虚拟交换机简介 175.OVS简介 176.DPDK加速的OVS 177.OVS的数据通路 178. ...
- 松滋市瑞星计算机职业学校,【2020职教活动周】学校第十五届计算机操作基础技能大赛顺利举行...
(本网通讯员:沈小波)为进一步强化学生计算机操作技能训练,提升计算机公共基础实践教学水平,提高育人质量.学校第十五届计算机操作基础技能大赛决赛于11月11日下午在西校区文华楼计算机实训中心顺利举行.学 ...
- 热烈庆祝《Vue.js 实战教程 V2.x(一)基础篇》上线了!
热烈庆祝<Vue.js 实战教程 V2.x(一)基础篇>上线了! 课程简介 课程地址:https://edu.csdn.net/course/detail/25641 机构名称:大华软件学 ...
- 机器学习实战教程(二):决策树基础篇之让我们从相亲说起
机器学习实战教程(二):决策树基础篇之让我们从相亲说起 一.前言 二.决策树 三.决策树的构建的准备工作 1.特征选择 (1)香农熵 (2)编写代码计算经验熵 (3) 信息增益 (4) 编写代码计算信 ...
最新文章
- node.js linux shell,bash – Node.js Shell脚本和参数
- 扫地机器人腿是咕噜_扫地机器人|如何避免买到“智障”,看这篇
- Linux操作系统下Oracle主要监控工具介绍
- 推荐系统中使用ctr排序的f(x)的设计-传统模型篇
- 【渝粤题库】国家开放大学2021春2441经济数学基础1题目
- mfc检测一个目录是否产生新文件_细数Java8中那些让人纵享丝滑的文件操作
- Dubbo管理控制台dubbo-admin搭建
- SourceInsight工程文件与源文件相对路径
- 使用Hbuilder将自己app发布到App Store
- OC5021B降压型恒流驱动控制芯片,关断时间可调
- IT大学生成长周报 | 第 6 期
- 在VC6.0下设置Unicode编译环境
- 高德地图定位及导航开发流程
- android 包命名不管你怎么命,千万不要用下面几个
- 数据分析:企业人力资源管理探索
- cmd下访问内部数据库
- CDOJ1059-秋实大哥与小朋友
- 【Popper报错】Popper: modifier “undefined“ provided an invalid “fn“ property
- java获取文件后缀_Java获取文件后缀的两种方式
- Linux安装CentOS系统
热门文章
- asp.net 域名注册查询接口 支持批量后缀查询
- Zookeeper C API 指南二(监视(Wathes), 基本常量和结构体介绍)
- 用Visual Studio 2005/2008提取EXE文件中的资源[图片|htm|光标文件]
- css工程师技巧,web前端工程师必须掌握的技巧–CSS Sprites技术(附基础操作教程)...
- 微型计算机系统视频适配器为,计算机硬件基础1-微型计算机系统组成(含教材6,8,9章内容).ppt...
- k1658停运到什么时候_2020年春节快递几号停运 2020年春节快递停运时间电商春节放假通知...
- 在Unity进行平台打包发布的时候需要注意的一些细节问题
- Mac VMWARE 安装redis
- vsftpd安装配置_vsftpd上传文件大小为0(主动模式)
- python 自动化发送邮件_干货 | 解放双手,用Python实现自动发送邮件