实现声明式事务,在Services.xml
来源:互联网 发布:网络运维平台 编辑:程序博客网 时间:2024/06/05 02:41
transactionManager
<object id="transactionManager"
type="Spring.Data.NHibernate.HibernateTransactionManager, Spring.Data.NHibernate20">
<property name="DbProvider" ref="DbProvider"/>
<property name="SessionFactory" ref="NHibernateSessionFactory"/>
</object>
<object id="TransactionInterceptor" type="Spring.Transaction.Interceptor.TransactionInterceptor, Spring.Data">
<property name="TransactionManager" ref="transactionManager"/>
<property name="TransactionAttributeSource">
<object type="Spring.Transaction.Interceptor.AttributesTransactionAttributeSource, Spring.Data"/>
</property>
</object>
<object id="BaseTransactionManager" type="Spring.Transaction.Interceptor.TransactionProxyFactoryObject" abstract="true">
<property name="PlatformTransactionManager" ref="transactionManager"/>
<property name="TransactionAttributes">
<name-values>
<add key="Save*" value="PROPAGATION_REQUIRED"/>
<add key="Set*" value="PROPAGATION_REQUIRED"/>
<add key="Finish*" value="PROPAGATION_REQUIRED"/>
<add key="Update*" value="PROPAGATION_REQUIRED"/>
<add key="Delete*" value="PROPAGATION_REQUIRED"/>
<add key="Add*" value="PROPAGATION_REQUIRED"/>
<add key="Get*" value="PROPAGATION_REQUIRED,readOnly"/>
<add key="Find*" value="PROPAGATION_REQUIRED,readOnly"/>
<add key="Load*" value="PROPAGATION_REQUIRED,readOnly"/>
<add key="*" value="PROPAGATION_REQUIRED"/>
</name-values>
</property>
</object>
TransactionAttributes中的列出的值表示对对应的方法采用事务,比如对Save开头的方法支持事务.(*是通配符),其中value的值可以有以下几种:
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作.
当前所有的事务都使用“PROPAGATION_REQUIRED”属性值,并且控制事务的操作权限为只读,以保证查询时不会更新数据。根据上述 定义 “PROPAGATION_REQUIRED”属性会造成为所有的操作都创建事务,从而会出现JPA的日志中查询时也会进行更新操作的现象,也就造成了效 率的低下。将所有查询的操作改成事务类型为“PROPAGATION_NEVER”(不使用事务),则查询效率立即提升,但是此时担心一个问题:比如在一 个saveXXX()的方法中,如果方法内部使用更新、查询、再更新的操作流程,会不会造成调用查询时,由于上述配置造成的抛出异常。另外,如果出现
〈prop key="myMethod"〉PROPAGATION_REQUIRED,readOnly,-Exception〈/prop〉
这样的配置,其中:
-Exception表示有Exception抛出时,事务回滚. -代表回滚+就代表提交
readonly 就是read only, 设置操作权限为只读,一般用于查询的方法,优化作用
- 实现声明式事务,在Services.xml
- 在Spring中实现声明式事务
- spring在xml中事务声明配置
- 声明式事务功能实现
- hibernate实现声明式事务
- Spring声明式事务XML配置
- 声明式事务(XML)【理解】【重点】
- 用jBeanBox替换Spring内核实现无XML配置的声明式事务服务
- Spring Aop实现声明式事务
- spring实现声明式事务原理
- Spring aop实现声明式事务
- 注解方式实现声明式事务
- 用WSE 2.0在XML Web Services里面实现Callback
- 用WSE 2.0在XML Web Services里面实现Callback
- Spring事务管理——使用XML配置声明式事务
- Spring事务管理——使用XML配置声明式事务
- spring4声明式事务—02 xml配置方式
- spring4声明式事务—02 xml配置方式
- shell脚本不换行刷新数据
- Kinect for Windows SDK开发入门(二):基础知识 上
- ASP.NET MVC 中 Ajax.ActionLink 的使用
- Objective-C简介
- 蝴蝶兰与鳞托菊
- 实现声明式事务,在Services.xml
- mount: you must specify the filesystem type
- 生化危机4 宝物组合
- Associate Professor Feng Liu Principal Research Fellow
- Ext.FormPanel
- hdu 1166 线段树 (初步)
- 霍夫曼树与霍夫曼编码
- 家乡的小河
- HDU1159 Common Subsequence (LCS)