您的位置:程序门 -> java -> 框架、开源



请教个spirng框架进行batch处理的问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


请教个spirng框架进行batch处理的问题
发表于:2008-01-17 13:42:40 楼主
  最近考虑到优化数据导入这块,所以看看通过batch这块内容有没有改进的余地。

但是加入startbatch(),EXECutebatch(),感觉没有什么效果。

下面是我测试时候的概略情况:

 

mastsvr这个service方法已注册,同时已注入sqlmapdao,dao是接口

mastsvr.adddata(){

//获取goodslist   商品列表,   banklist   部门列表

.......

//对每个商品id和部门id分别插入一条   记录到mast表中

dao.insertbunataxbatlst(goodslist,   banklist);

}

 

sqlmapdao中:

public   void   insertbunataxbatlst(   final   list   goodslist,   final   list     banklist           {
                  getsqlmapclienttemplate().EXECute(new   sqlmapclientcallback()   {
                                public   object   doinsqlmapclient(sqlmapEXECutor   EXECutor)
                                                throws   sqlexception   {
                                        EXECutor.startbatch();
//                                         getsqlmapclienttemplate().getsqlmapclient().getdatasource().getconnection().setautocommit(   true   );
                                        system.out.println("当前事物状态:   "   +   getsqlmapclienttemplate().getsqlmapclient().getdatasource().getconnection().getautocommit()   );
                                        //   do   some   ibatis   operations   here
                                        for(int   j=   0   ;j <   goodslist.size();j++){
                                                olygoods   olygoods   =   (olygoods)goodslist.get(j);
                                             
                                                mast   mast   =   new   mast();
                                                mast.setgoodsid(olygoods.getgoodsid());
                                             

                                                for   (int   i   =   0;   i   <   banklist.size();   i++)   {
                                                        mast.setdeptid(   ""+((bank)   banklist.get(i)).getbankid()   );
                                                        mast.setinnum(new   long(0));
                                                        mast.setoranum(new   long(0));
                                                        mast.setoutnum(new   long(0));
                                                        mast.setrepayamt(new   bigdecimal(0));
                                                        mast.setreturnnum(new   long(0));
                                                        mast.setsalenum(new   long(0));
                                                        mast.setstocknum(new   long(0));
                                                        mast.setsubreturnnum(new   long(0));
                                                        mast.setwaitinnum(new   long(0));
                                                     
                                                        insertbysql(   "oly_mast_goods.addmastgoods",   mast);

                                                }
                                      }
                                        EXECutor.EXECutebatch();
                                        return   null;
                                }
                        });
        }

 

junit测试结果是:

6248记录,batch   加上和不加上差不多,基本都是18s左右。

问题1:查询网上文章,说jdbc的autocommit属性默认被设置为true的,但是我打印出来为false(而且设置没用,我用   getsqlmapclienttemplate().getsqlmapclient().getdatasource().getconnection().setautocommit(   true   );或配置文件里加

<property   name="defaultautocommit"> <value> true </value> </property>   这些方法也没有用,始终是false),但如果把adddata()方法改名,让其得不到事务处理,打印出来就是true,设置就有用了,是不是事务处理时自动将autocommit设置为false了?

问题2:如何真正发挥batch的作用


快速检索

最新资讯
热门点击