小弟要实现一下的功能:
1、检查数据是否完整
2、进行拷贝数据
3、如果数据不完整,则等待20分钟后重新拷贝数据
4、检查数据是否完整,如果完整,则跳出循环
代码如下,请教各位大师,怎么实现
do{
//判断是否完整
for(int i = 0 ; i < nameLongth.length ; i++){
if(nameLongth[i].equals("sunlineTELFile.ctl")){
count_number = 1;
}
}
//数据不完整,则等到20分钟后重新执行bat文件,等待20分钟需要怎么写?
if (count_number!=1){
try {
process = Runtime.getRuntime().exec("D:\\etlpath\\BillFtp\\ftpdown.BAT");
} catch (IOException e) {
e.printStackTrace();
}
}
//跳出
}while(count_number==1);
你可以这样写
[code="java"]
do {
//判断是否完整
boolean completeness = true;
for (int i = 0; i < nameLongth.length; i++) {
if (!nameLongth[i].equals("sunlineTELFile.ctl")) {
completeness = false;
break;
}
}
//数据不完整,则等到20分钟后重新执行bat文件,等待20分钟需要怎么写?
Thread.sleep(TimeUnit.MINUTES.toMillis(20));
if (completeness) {
try {
//你这种写法有可能造成没有执行,解决办法看[url=http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1]这帖子[/url]
process = Runtime.getRuntime().exec("D:\\etlpath\\BillFtp\\ftpdown.BAT");
} catch (IOException e) {
e.printStackTrace();
}
}
//跳出
} while (!completeness);
[/code]
你也可以这样写
[quote]
final ScheduledThreadPoolExecutor executror = new ScheduledThreadPoolExecutor(1);
executror.scheduleAtFixedRate(new Runnable() {
public void run() {
//To change body of implemented methods use File | Settings | File Templates.
// 1. 判断数据是否完整
for (int i = 0; i < nameLongth.length; i++) {
if (!nameLongth[i].equals("sunlineTELFile.ctl")) {
return;
}
}
try {
process = Runtime.getRuntime().exec("D:\\etlpath\\BillFtp\\ftpdown.BAT");
} catch (IOException e) {
e.printStackTrace();
}
executror.shutdownNow();
}
// 0 表示延时0秒启动,5表示每5秒钟重复一次
}, 0, 20, TimeUnit.MINUTES);
[/quote]
你都可以试试看
让线程休眠 20 分钟
[code="java"]Thread.sleep(TimeUnit.MINUTES.toMillis(20));[/code]
你可以还一种思路
我开一个定时任务
每20分钟检查一次
如果数据完整,就执行bat命令,关闭定时任务
如果数据不完整,本次定时任务执行完,等待下次一次执行
[code="java"]
ScheduledThreadPoolExecutor executror = new ScheduledThreadPoolExecutor(1);
executror.scheduleAtFixedRate(new Runnable() {
public void run() {
//To change body of implemented methods use File | Settings | File Templates.
// 1. 判断数据是否完整
boolean completeness = checkCompleteness();
//如果不完整
if(!completeness) {
return;
}
//如果完整,执行bat
exec()
}
// 0 表示延时0秒启动,5表示每5秒钟重复一次
}, 0, 5, TimeUnit.SECONDS);
[/code]
此外,你的
[code="java"]
process = Runtime.getRuntime().exec("D:\etlpath\BillFtp\ftpdown.BAT");
[/code]
写的非常有问题,你可以参阅[url=http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html?page=1]When Runtime.exec() won'[/url]的good example
忘记了,exec()完毕以后,别忘记了shutdown
完整的应该是
[code="java"]
final ScheduledThreadPoolExecutor executror = new ScheduledThreadPoolExecutor(1);
executror.scheduleAtFixedRate(new Runnable() {
public void run() {
//To change body of implemented methods use File | Settings | File Templates.
// 1. 判断数据是否完整
boolean completeness = checkCompleteness();
//如果不完整
if(!completeness) {
return;
}
//如果完整,执行bat
exec();
executror.shutdownNow();
}
// 0 表示延时0秒启动,5表示每5秒钟重复一次
}, 0, 5, TimeUnit.SECONDS);
[/code]