iBatis框架做batch处理的问题

操作方法

  • 01

    下面达内it培训以一个案例来讲解一下iBatis框架做batch处理的问题,希望大家喜欢。  最近,同事的一个项目用Spring+iBatis做为数据持久层框架,MySQL数据存储。项目发布不久就遇到了严重的性能问题,因此决定采用batch的方式提交数据。我以前的一篇文章:里详细的介绍了iBatis框架做batch处理的方式以及可能存在的问题和性能优化,因此同事参考这偏文章对项目进行了改造,引入了batch处理机制。但事情并不顺利,在只有2000条数据的情况下,用iBatis框架做batch处理和不做batch所消耗的时间居然没有区别,平均都要50秒左右。而我在做测试的时候如果做batch仅仅需要1秒,甚至更少的时间。真是见鬼了,难道是Spring在搞鬼?因为我的测试和同事的项目唯一的区别就是我是直接使用iBatis的SqlMapClient,而同事的项目是使用Spring来获取SqlMapClient的实例。仔细检查了一下朋友的数据源配置,也没有发现什么问题。如下: <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"           destroy-method="close">         <property name="driverClassName" value="com.mysql.JDBC.Driver"/>         <property name="url" value="jdbc:mysql://localhost/test"/>         <property name="username" value="root"/>         <property name="password" value="root"/>     </bean>     <bean id="sqlMapClient"           class="org.springFramework.orm.ibatis.SqlMapClientFactoryBean">         <property name="configLocation" value="SqlMapConfig.XML"/>         <property name="dataSource" ref="dataSource"/>     </bean> 就在万般无奈的时候,突然想到一个问题:如果JDBC的AutoCommit属性被设置为true的话,那即便是按照batch的方式来写程序,也是徒劳的,每一条语句都会直接执行。于是抱着试试看的态度执行了下面的语句: System.out.println("当前事物状态: " + sqlMapClient.getDataSource().getConnection().getAutoCommit());  果然不出所料,输出的值为:true,难怪batch不可用!问题找到了,如何解决呢?尝试在batch语句执行前手工设置autoCommit属性为false,如:sqlMapClient.getDataSource().getConnection().setAutoCommit(false);结果不好用,于是查看了一下org.apache.commons.dbcp.BasicDataSource的源代码,发现它的defaultAutoCommit属性默认值为true,这就难怪spring获取的SqlMapClient的autoCommit属性为true了,既然问题找到了, 解决起来就容易多了,只需要在上面的datasource配置中增加一行:<property name="defaultAutoCommit" value="false"/>就可以了。 达内IT总结:iBatis默认的autoCommit属性为false,因此用iBatis框架做batch处理的时候基本不会遇到什么问题;在Spring环境下,要看具体DataSource的配置。

(0)

相关推荐

  • VS2013下手把手教你用VC++做程序

    上一篇作者教大家把VS2013装上,今天主要是分享一下新平台下用VC++的MFC框架做程序,保证大家即学即,如果对vc++比较了解的,就可以跳过了.-- 利用MFC框架生成项目 01 首先打开VS20 ...

  • 构筑Linux防火墙之IPtables的概念与用法(2)

    目标(target) 我们已经知道,目标是由规则指定的操作,那些与规则匹配的信息包执行这些操作。除了允许用户定义的目标之外,还有许多可用的目标选项。用于建立高级规则的目标,如LOG、REDIRECT、 ...

  • 3个方面提升设计效率

    小编:作为一个刚进入设计行业不久新人,跟大家一样总是被上司催设计东西慢,工作效率低.我也总是抱怨,还拿自己只是个新手来当借口,但发现要想提高效率完全可以从积累素材.设计过程等等方面入手,具体的让我们一 ...

  • 网易设计师复盘小程序轻设计

    年初小程序即将发布时,几乎所有的互联网从业人员都会讨论甚至希望在第一波浪潮里能有所为,打开一个新的局面.2017年已过大半,小程序只悄声作为一些产品的附加入口.然而作为第一批试水的设计师,我或许可以分 ...

  • 如何设定新互动儿童教育品牌?

    ABCmouse,一款全美知名.深受父母与儿童喜爱的英语启蒙教育App,拥有美国原汁原味的内容资源.地道发音.益智游戏与学习方法.本次和腾讯强强联手,除了内容本身的提升,腾讯ISUX设计团队也为产品塑 ...

  • 做网站的流程攻略

    做网站的步骤,和做宣传册的性质差不多,宣传册是由封面.封底.内容页设计.制作而成,而网站是由主页.频道页.内容页做成.只是做宣传册设计好之后,印刷而成.而网站制作.设计之后,申请域名.购买空间,发布到 ...

  • 微信公众号如何运营?公众平台维护运营知识。

    在新媒体时代,微信营销是一种很流行的营销方式,这种营销不仅体现在直接盈利方面同时也体现在提高公司品牌知名度方面,利用新媒体传播营销是一种受欢迎在短时间内也很有效.但是看着别家微信营销做得风生水起,一些 ...

  • zz网站建设|zz做网站

    创建站点之前,我们应该首先在我们的磁盘上创建一个文件夹,用于存放站点内的所有资源,当然如果你的站点资源比较丰富这是可以建立子文件夹存放站点内相应的资源.例如:站点文件夹为myweb,子文件夹image ...

  • 三星 I9300 基于Cm27号源码编译 完整汉化

    操作方法 01 介绍 Android版本:4.3 UI类型:Cm10.2 内核版本:3.0.64 ROM介绍 基于最新的Cm源码编译而成的卡刷版本; 更新了Cm官方的更新内容,完整汉化.bug修复.框 ...