今天用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;
}
分享到:
相关推荐
总的来说,通过结合Redis的乐观锁机制、连接池优化和分布式锁,我们可以有效地解决高并发环境下的连接超时和超卖问题,保障系统的稳定性和正确性。在实际项目中,还需要根据具体业务需求和系统架构进行调整和优化。
错误描述:oracle远程连接服务器出现 ORA-12170 TNS:连接超时 错误检查:有很多是oracle自身安装的问题,但是我这里服务器配置正常,监听正常,服务正常,远程可以ping通服务器。 这里主要是防火墙问题,解决办法: ...
我们可以通过检查 tns 配置文件、服务器防火墙和路由配置,逐步排除问题的原因,从而解决连接超时的问题。 在实现内网和外网的同时访问时,我们可以使用 route 命令来设置路由信息。例如,我们可以使用以下命令: `...
解决连接超时问题需要从多方面考虑,包括调整 wait_timeout 参数的值、使用 Connector/J 连接属性、及时释放连接等方法。只有通过合适的方法,才能避免连接超时问题的出现,提高系统性能和稳定性。
提供一个c# socket连接池设计的例子,解决socket并发连接限制的问题,并且提供一种设置连接超时时间的方法,默认连接超时时间是不能设置的,提供了socket网络发送数据的接口.可用于pos小票打印机通讯。
要解决连接超时问题,需要从以下几个方面入手: 1. 调整 wait_timeout 参数的值,使其合理化。 2. 在 Hibernate 框架中,使用 Connection.isValid() 方法来测试连接的有效性。 3. 使用 Connector/J 连接属性 '...
本篇将详细讲解Socket连接超时的相关知识点,结合易语言提供的源码例程,帮助你深入理解并解决此类问题。 首先,Socket是网络通信的接口,它允许应用程序通过Internet或其他网络进行通信。在TCP/IP协议栈中,Socket...
nodejs 关于mysql模块 连接超时自动断开解决方法,在这块遇到的坑,而且坑了很久才找到的,分享只为求分
在应用程序中,如果遇到连接超时的错误,可以在程序中修改Connection对象的超时设置,然后打开该连接。 例如: Set Conn = Server.CreateObject("ADODB.Connection") DSNtest = "DRIVER={SQLServer};SERVER=...
### 如何解决PI超时问题 #### 背景与概述 在SAP NetWeaver Process Integration (简称 SAP PI) 的使用过程中,超时问题是较为常见的技术难题之一。特别是对于同步场景下的集成流程(Synchronous XI/PI Scenarios)...
为解决这个问题,开发者通常会尝试调整 DataSnap 的连接超时参数,例如在服务器端或客户端代码中设置合适的超时值。然而,如果这些常规方法无效,可能需要寻找额外的解决方案,比如使用特定的补丁。"delphi DataSnap...
如果从站出现故障或者响应缓慢,整个系统的通信效率可能会降低,导致连接超时。 1. **从站响应时间 (RESP_TO)**:在S7-1200 PLC的Modbus RTU通信中,`RESP_TO`参数定义了主站等待从站响应的最大时间。默认值为1000...
需要注意的是,尽管调整`interactive_timeout`可以解决连接超时问题,但过度增加超时时间可能会导致服务器资源被长时间占用,尤其是在高并发的环境中。因此,优化数据库连接管理和使用连接池是更推荐的做法。 连接...
解决问题:delphi D10下(XE8\XE7),DataSnap连接超时设置在android中使用无效,导致不能连接服务器时长时间等待。补丁包带源码及说明。 Datasnap ConnectTimeout android
利用新建类,异步传送参数,解决断连接向多个ip发送socket包产生socket.connect超时的问题。实现向每一个ip发送包新建立一个线程,由于是新建立的线程,全部异步,所以没法记录文本文件(同一个文件同时被记录),...
将登录超时设置为一个较大的数字,连接超时改为 0。 四、在.NET 中调整等待响应时间 在.NET 中,如果调用存储过程,需要调整等待响应时间。可以按照以下代码进行调整: ``` Dim Cmd As New SqlCommand("NBA", Con...
本文将详细介绍如何解决SSH连接超时的问题。 首先,我们可以从服务器端着手。在服务器上,你需要编辑`/etc/ssh/sshd_config`配置文件。这里有两个关键的参数可以调整以防止连接超时: 1. `ClientAliveInterval 60`...
为了解决 RACH 冲突解决定时器超时问题,可以采取以下方法: 1. 调整 RACH 配置参数:可以通过调整 RACH 配置参数,例如调整 RACH 时间槽的数量和时长,以减少 RACH 冲突的可能性。 2. 优化 UE 的 RACH 算法:可以...
mysql5将其连接的等待时间(wait_timeout)缺省为8小时。怎么不让它超时呢