qq_33661507
同声
采纳率50%
2019-08-02 11:55 阅读 388

怎么提高AGILE PLM文件下载速度(多线程或并行编程)

1描述:公司最近在做Agile PLM系统二次开发,需要把旧PLM系统物料的附件迁移到新的PLM系统中,大概有50000个左右物料,每个物料的附件有3到4个,附件大概都有几兆吧,不我能统计太多文件大小。旧系统使用的API.jar包不能与新系统共用,
所以我初步处理方式是:
先创建java工程A(old_AgileAPI.jar匹配 jdk7 )从旧PLM系统中将物料的附件下载到本地,再创建java工程B(new_AgileAPI.jar 匹配jdk8)根据新旧物料对照表,将本地已下载的附件上传到新系统中。在 java工程A中测试了的下载文件的速度,下载40个物料的文件大概花费2分钟,由此可知如果要把旧系统的所有物料附件下载完,估计要花费40多个小时,这样做花费时间太久了,我当前的电脑配置Intel I5 ,CPU 4核心。

2、问题: 有什么好的方案可以加快下载文件?采用什么方法可以将文件从旧系统迁移到新系统?这个可能涉及到并行编程方面,我对这一块不是很熟悉。
从旧系统下载文件与将文件上传到新系统,都需要先用户认证获取session后才能操作。代码如下:

public static IAgileSession getSession(){
        IAgileSession session = null;
        if (session == null) {
            HashMap<Integer, String> params = new HashMap<Integer, String>();
            params.put(AgileSessionFactory.USERNAME, "**");
            params.put(AgileSessionFactory.PASSWORD, "**");
            params.put(AgileSessionFactory.URL, "http://***:***/**");
            try {
                session = AgileSessionFactory.createSessionEx(params);               
            } catch (APIException e) {
                e.printStackTrace();
            }
        }
        return session;
    }
public void execute( String oldPart) throws APIException {      
             IAgileSession session=getSession();        
             IItem item = (IItem) session.getObject(ItemConstants.CLASS_ITEM_B     ASE_CLASS,oldPart);
         ITable attachTables  = item.getTable(ItemConstants.TABLE_ATTACHMENTS);   

      ......................

        IAttachmentFile att = (IAttachmentFile)row;
          InputStream inputStream = att.getFile();               
                     //创建新物料           
        FileHelper.download(inputStream,partPath,fileName);

            ......................
}   

如果采用多线程去下载物料的附件,在每个子线程中调用getSession()创建各自的会话,还是在类中创建一个会话共享给所有的子线程呢?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

相关推荐