事务管理最佳实践多余的话之二
Transaction后缀给声明式事务管理带来的好处
 
前言
《事务管理最佳实践全面解析》,两篇文章发表之后,关于事务管理最佳实践,我又想到了一些,就作为《事务管理最佳实践多余的话之二》的内容吧。《事务管理最佳实践多余的话之一每次请求,一次数据库连接,一次事务是不是金科玉律?》  
Transaction后缀给声明式事务管理带来的好处
良好的面向对象的程序,一般都使用接口和实现分离的模式。我在《事务管理最佳实践全面解析》一文中提出,用*Transaction和*Dao后缀这样的形式,区分方法的不同用途。
这样,可以提醒接口的实现者和方法的使用者注意到它们对于数据库连接和事务的依赖。
实际上,使用*Transaction后缀这样的命名方式,对于声明式事务管理也是很有用处的。如,Spring的事务管理中,我们一般使用方法名的匹配来应用声明式事务。
一、请看下面的Spring配置:
<bean id="txProxyTemplate" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
       <property name="transactionManager" ref="transactionManager"/>
       <property name="transactionAttributes">
           <props>
              <prop key="*">readOnly</prop>
              <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
              <prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
              <prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
              <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
              <prop key="delete*">PROPAGATION_REQUIRED,-Exception</prop>
              <prop key="remove*">PROPAGATION_REQUIRED,-Exception</prop>
              <prop key="query*">PROPAGATION_REQUIRED, readOnly,-Exception</prop>
              <prop key="load*">PROPAGATION_REQUIRED, -Exception</prop>
           </props>
       </property>
    </bean>
这是来自于真实项目中的Spring声明式事务配置。我们对每一个业务层的实现类都应用了这样的事务配置。
我们对所有业务服务Service方法使用了只读事务。对以add,save,modify,update,delete,remove,load开头的方法都使用了事务。
但是,实际上,虽然我们开发的软件一个“信息管理系统”,是围绕数据库开发的。但是,在Service层,我们还是有很多不操作数据库的方法。
如,单纯根据业务逻辑进行计算的,适用缓存进行计算的,执行email发送,文件上传等等任务的方法,在这种配置下都不分青红皂白的应用了事务。
SpringAOP生成的代理对象代理了我们的服务实现类,所有的方法执行前后都被拦截,用来得到和关闭数据库连接,设置、提交和回滚事务。而不管这个方法是否用到了这个数据库。
如果遵照我提出的这个方法,使用*Transaction后缀来标识需要处理事务的方法,那么我们使用Spring声明式事务时,就可以非常精确、有效的应用事务了!
二、请看下面的Spring事务配置:
<!-- UninstallWcmsJbpmProcessDefinition -->
    <bean id="uninstallWcmsJbpmProcessDefinition" parent="txProxyTemplate">
         <property name="target">
           <ref bean="uninstallWcmsJbpmProcessDefinitionTarget"/>
       </property>
       <property name="transactionAttributes">
           <props>
              <prop key="uninstall*Wcms*Transaction">PROPAGATION_REQUIRED,-Exception</prop>
           </props>
       </property>
   
    </bean>
我们对这个类中以uninstall开头,中间包含Wcms,最后以Transaction结尾,这样的规则命名的方法,应用了事务。
三、部分源代码:
(一)2个应用了Spring声明式事务的方法:
/**
     *使用SPring的ibatis,主要要配置iBatis的Spring声明式事务。
     *@throwsException
     *<prop key="uninstall*Wcms*Transaction">PROPAGATION_REQUIRED,-Exception</prop>
     *1,还要删除所有 频道---新闻--工作流表中标记不为1的记录。
     */
    publicvoid uninstallAllWcmsProcessDefinitionsTransaction() throws Exception{
       /**
        *
        *
        */
       this.getWcmsSystemChannelProcessdefinitionDao().deleteAll();
        this.getWcmsSystemChannelNewsinfoDao().deleteAllProcessingWcmsSystemChannelNewsinfoModule();
        
        
      
      
    }
    /**
     *<prop key="uninstall*Wcms*Transaction">PROPAGATION_REQUIRED,-Exception</prop>
     *@paramname
     *@throwsException
     */
    publicvoid uninstallWcmsSystemChannelProcessdefinitionTransaction(String name) throws Exception{
      
       this.getWcmsSystemChannelProcessdefinitionDao().deleteByProcessdefinitionName(name);
        this.getWcmsSystemChannelNewsinfoDao().deleteAllProcessingWcmsSystemChannelNewsinfoModuleByProcessdefinitionName(name);
      
    }
(二)用到的Dao类,用来实际访问数据库的2个DAO对象。
/**
     *SPring管理的ibatis功能
     */
private IWcmsSystemChannelProcessdefinitionDao wcmsSystemChannelProcessdefinitionDao;
    private IWcmsSystemChannelNewsinfoDao wcmsSystemChannelNewsinfoDao;

转载于:https://www.cnblogs.com/armlinux/archive/2006/11/29/2391054.html

事务管理最佳实践多余的话之二:Transaction后缀给声明式事务管理带来的好处相关推荐

  1. 事务管理最佳实践多余的话之一“每次请求,一次数据库连接,一次事务”是不是金科玉律?...

    事务管理最佳实践多余的话之一 ----"每次请求,一次数据库连接,一次事务"是不是金科玉律? 前言 <事务管理最佳实践全面解析>一文发表之后,关于事务管理最佳实践,还有 ...

  2. Spring Framework--Data Access(1)--Transaction Management(2) - 声明式事务管理

    一.概述 Spring的声明式事务管理是通过Spring的AOP实现的,Spring的事务管理和EJB CMT类似,都可以在方法级别上定义事务行为,不过他们两者也有区别,表现在: (1)EJB CMT ...

  3. Spring声明式事务管理的配置详解

    环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加方法: 点击项目右键->Build Path->Add ...

  4. Spring声明式事务配置管理方法

    /*2011年8月28日 10:03:30 by Rush  */ 环境配置 项目使用SSH架构,现在要添加Spring事务管理功能,针对当前环境,只需要添加Spring 2.0 AOP类库即可.添加 ...

  5. 事务管理最佳实践全面解析

    事务管理最佳实践全面解析 前言 写作这篇文章的起因,是前一段时间,我使用Jbpm工作流引擎开发工作流管理系统的过程中,使用编程方式管理事务时遇到的问题. 由于之前很长一段时间,我一直都在使用Sprin ...

  6. spring配置c3p0连接池、spring的声明式事务管理

    一.spring配置c3p0连接池: 1.导入maven依赖: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> & ...

  7. 全面分析 Spring 的编程式事务管理及声明式事务管理(转)

    摘要 Spring 的事务管理是 Spring 框架中一个比较重要的知识点,该知识点本身并不复杂,只是由于其比较灵活,导致初学者很难把握.本教程从基础知识开始,详细分析了 Spring 事务管理的使用 ...

  8. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  9. Java程序员从笨鸟到菜鸟之(八十)细谈Spring(九)spring+hibernate声明式事务管理详解

    声明式事务管理是spring对事务管理的最常用的方式,因为这种方式对代码的影响最小,因此也符合非侵入性的轻量级容器的概念.Spring的事务管理是通过AOP的方式来实现的,因为事务方面的代码与spri ...

  10. Spring声明式事务管理

    事务管理方式 1.编码方案 不建议使用,它具有侵入性.在原有的业务代码基础上去添加事务管理代码 2. 声明式事务控制,基于AOP对目标进行代理,添加around环绕通知. 这种方案,它不具有侵入性,不 ...

最新文章

  1. 图解Android - Android GUI 系统 (2) - 窗口管理 (View, Canvas, Window Manager)
  2. jitter 如何优化网络_如何做好关键词优化网络?
  3. js 操作数组函数-自定义
  4. SmartUpload文件上传
  5. HTML5+CSS3基础
  6. 全球及中国钢铁行业投资产量趋势及营销盈利模式研究报告2021版
  7. 计算机考研自我介绍大概多少字,考研复试中文自我介绍多少字合适
  8. SEO关键词排名优化做到百度首页的核心操作
  9. 老牛知点所以然-su和sudo的区别
  10. [含论文+源码等]基于HTML5,DIV CSS实现的宠物狗个性化服务网站前端(静态网页毕业设计)web前端毕设
  11. 甜甜用计算机计算1050,NVIDIA GTX 1050/1050 Ti发布:75W功耗、取代GTX960
  12. python 管线原理图_Q-Q图原理详解及Python实现
  13. 在blog中显示天气预报、日历、时钟、MSN、QQ在线状态
  14. 中国联通3g上网设置
  15. Auto CAD使用快捷键
  16. 5G NR LDPC编译码汇总
  17. 【MM小贴士】SAP MM模块 序列号管理
  18. 哈哈日语 学日语 入门难?那是你用错了方法!
  19. day48_电力系统框架搭建
  20. 南京信息工程大学本科毕业论文答辩和论文选题PPT模板

热门文章

  1. java(6) ArrayList源码
  2. 转 PHP函数---$_Get()和$_Post()的用法
  3. ORA-04031:unable to allocate 4120 bytes of shared memory ‘obj stat mem’故障解决
  4. boost-同步-互斥量类型
  5. 实战Nginx与Perl、Java的安装与配置
  6. 线代总结1 线性代数中的线性方程组
  7. 【课本】【No.4】数字特征 离散/连续均值/方差 随机向量 协方差 相关系数 矩 偏度 峰度 多维均值/协方差 运算性质 条件期望 随机个随机向量的和 正态中的条件期望是线性函数
  8. 根据日志统计出每个用户在站点所呆时间最长的前2个的信息
  9. React 深度学习:ReactFiberRoot
  10. spring-session(一)揭秘续篇