// 使用debug命令控制是否要开启sqlload守护进程(默认开启)
if (isOpenDaemonThread)
{
// 数据入库守护线程,如果子进程阻塞,会做超时(30s)中断
Thread timeOutTh = new BasicThread()
{
@Override
public void run()
{
try
{
if (logger.isInfoEnabled())
{
logger
.info("*******************Start a oracle sqlldr daemon thread************************");
}
/**
* 每间隔500毫秒检查一次sqlload是否执行成功,总共最多检查60次。如果sqlload执行成功
* 则退出检查操作,守护进程任务结束,线程消亡。如果检查了60次,sqlload还没有执行成功
* 则认为sqlload进程阻塞,中断sqlload进程。
*
*/
for (int i = 60; i >= 0; i--)
{
// 守护进程睡眠500毫秒
threadSleep(PROCESS_TIMEOUT);
// sqlload执行成功,退出检查操作
if (exitValue == 2 || exitValue == 0)
{
break;
}
}
// 判断数据入库子线程是否执行完成,超时?
if (exitValue == -1)
{
isTimeOut = true;
if (ldr != null)
{
ldr.destroy(); // 销毁sqlldr进程
}
}
}
catch (Exception e)
{
logger.error(
"OracleSqlldr deamon thread exception", e);
}
}
};
timeOutTh.start();
}
if (isOpenDaemonThread)
{
// 数据入库守护线程,如果子进程阻塞,会做超时(30s)中断
Thread timeOutTh = new BasicThread()
{
@Override
public void run()
{
try
{
if (logger.isInfoEnabled())
{
logger
.info("*******************Start a oracle sqlldr daemon thread************************");
}
/**
* 每间隔500毫秒检查一次sqlload是否执行成功,总共最多检查60次。如果sqlload执行成功
* 则退出检查操作,守护进程任务结束,线程消亡。如果检查了60次,sqlload还没有执行成功
* 则认为sqlload进程阻塞,中断sqlload进程。
*
*/
for (int i = 60; i >= 0; i--)
{
// 守护进程睡眠500毫秒
threadSleep(PROCESS_TIMEOUT);
// sqlload执行成功,退出检查操作
if (exitValue == 2 || exitValue == 0)
{
break;
}
}
// 判断数据入库子线程是否执行完成,超时?
if (exitValue == -1)
{
isTimeOut = true;
if (ldr != null)
{
ldr.destroy(); // 销毁sqlldr进程
}
}
}
catch (Exception e)
{
logger.error(
"OracleSqlldr deamon thread exception", e);
}
}
};
timeOutTh.start();
}