解决Http连接超时的问题

今天用DWR开发一个手工调度ETL的界面:遇到了由于ETL调度慢,而导致连接超时的问题;
解决方案:前台用DWR定时调度后台,而后台不是等到ETL实行完了才进行返回,而是开启一个线程的方式,让其在后台运行。


前台代码如下:



/**
* 执行ETL调度
*/
var execETL = function(){

//DWR调用
DbSyncService.execETLForOther(Ext.getCmp('month').getValue(true), function(d){
if(d == 'true'){
Ext.getBody().unmask();
Msg.alert('' + Ext.getCmp('month').getValue().format('Y年m月') +'ETL抽取成功' + ':<br><span style="color:red">' +
'     (1)卷包生产模块及设备效能两个文档中所涉及的ETL;<br>' +
'     (2)生产综合模块中四个ETL:<br>' +
'         6.1制造中心产量综合分析月报表DW_SUM_SCZH_OUTPUT_ZHFX_MT<br>' +
'         6.2制造中心卷烟价类结构对比分析月报表DW_SUM_SCZH_MANU_PRICE_DBFX_MT<br>' +
'         7.2.1卷包机组产能产量日报表DW_SUM_JBSC_JB_MACHSET_CNCL_DT<br>' +
'         7.2.2卷包班组台套产能产量日报表DW_SUM_JBSC_JBBZ_MSET_CNCL_DT<br>' +
'     (3)计划调度模块中:2.5中烟计划管理----生产情况<br>' +
' </span>');
}else{
Ext.getBody().mask('正在' + Ext.getCmp('month').getValue().format('Y年m月') + 'ETL<span style="color:red">' + d + ' </span>数据...','x-mask-loading');
execETL.defer(3000);
}
})

}

//执行调度函数
execETL();



后台代码如下:

在service上声明一个静态变量:
	/**
* 当前正在执行ETL相关信息
*/
public static String currentEtlInfo = "";





/**
* <p>方法名: execETLForOther</p>
* <p>描述: 其他模块的ETL抽取</p>
* @param month 月份
* @return
* @throws Exception
*/
public String execETLForOther(final String month)throws Exception{
//要执行的ETL数组
final String[][] etlNameArr=new String[][]{
/********************卷包生产模块所有ETL-Start******************************/

//机台上报
{"cn.com.widemex.dc.etl.jb.jtsb.DwTxJbscScjcxxDt-D",""}, //生产基础信息
{"cn.com.widemex.dc.etl.jb.jtsb.DwSumJbscJjclxhhzDt-D",""}, //卷接机产量消耗汇总表
{"cn.com.widemex.dc.etl.jb.jtsb.DwSumJbscBzclxhhzDt-D",""}, //包装机产量消耗汇总表

//机台生产日报
{"cn.com.widemex.dc.etl.jb.scrb.DwSumJbscJjbbDt-D","卷接生产日报表"}, // 卷接生产日报表
{"cn.com.widemex.dc.etl.jb.scrb.DwSumJbscPackingDt-D","包装生产日报表"}, // 包装生产日报表
{"cn.com.widemex.dc.etl.jb.scrb.DwSumJbscPackBrandDt-D","包装生产按牌号汇总日报表"}, // 包装生产按牌号汇总日报表

};

if("".equals(currentEtlInfo)){//如果当前ETL信息为空,则启动一个线程,在后台
//开启一个线程
new Thread(){
public void run() {
try {
for (String[] etlName : etlNameArr) {
//当前信息赋值给静态变量currentEtlInfo
currentEtlInfo = etlName[1];
//执行ETL
dbSyncDao.execETL(new String[]{etlName[0]} , month);
}
currentEtlInfo = "over";
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();

//设置当前线程为第一个
currentEtlInfo = etlNameArr[0][1];

}else if("over".equals(currentEtlInfo)){ //如果执行完毕,则返回true

currentEtlInfo = ""; //指控当前ETL的信息

return "true";

}


return currentEtlInfo;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值