在webservice里调用多个耗时的方法时,如果按顺序执行,下面的方法要等上面的方法执行完毕才能执行,如果这些方法比较耗时,并且包括回调等异步调用,就回出现下面的方法不能正确执行,实例代码如下:
public String runMethod(String syncId) {
try {
//处理Datapull
dataPullService.setSyncId(syncId);
//设置数据库参数
dataPullService.setJdbcUrl(Config.getStringValue("jdbc.jdbcUrl"));
dataPullService.setUser(configurer.decrypt(Config.getStringValue("jdbc.user"), "1202000200021234"));
dataPullService.setPassword(configurer.decrypt(Config.getStringValue("jdbc.password"), "1202000200021234"));
dataPullService.setTypeid(1);
dataPullService.run();
//处理ofd转换
ofdService.setSyncId(syncId);
ofdService.setServerUrl(Config.getStringValue("serverUrl"));
ofdService.run();
//判断OFD文件是否转换完成
while(true) {
if(serviceManager.isHasOFD(syncId)) {
break;
}
}
//处理pdf转换
pdfService.setSyncId(syncId);
pdfService.setServerUrl(Config.getStringValue("serverUrl"));
pdfService.run();
}catch(Exception e) {
return "error "+syncId;
}
return "success "+syncId;
}
在上面的方法里,处理ofd的代码执行完毕会在某个表里插入一条数据,这个操作耗时,并且是异步的,会出现还没有插入成功,下面的pdf执行代码查询不到记录导致调用pdf部分失败。
解决方案是:一直去查询那张表,如果有记录则调用pdf部分代码,使用死循环解决。
如果有更好的方案,请读者不吝赐教,感激万分