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()创建各自的会话,还是在类中创建一个会话共享给所有的子线程呢?