【发布时间】:2019-11-25 00:18:59
【问题描述】:
我需要使用在外部类中初始化的变量才能在内部类中使用。所以我使用了静态变量。这也是 Flink 应用程序。
当构建为 eclipse-export-runnable jar 时——它工作正常——变量的状态保留
当构建为 maven 或 eclipse-export-jar - 它失败 - 变量状态丢失
FileMonitorWrapper.fileInputDir--values 是 "" 并且不获取传递的值。
听起来很奇怪..任何想法
static transient String fileInputDir="";
static transient String fileArchiveDir="";
@SuppressWarnings("serial")
public DataStream<String> ScanDirectoryForFile(String inputDir, String inputFilePattern,String archiveDir, StreamExecutionEnvironment env) {
try {
FileMonitorWrapper.fileArchiveDir = archiveDir;
FileMonitorWrapper.fileInputDir = inputDir;
filteredDirFiles = dirFiles.filter(new FileMapper());
.
.
.
}
}
@SuppressWarnings("serial")
static class FileMapper implements FilterFunction<TimestampedFileInputSplit>{
@Override
public boolean filter(TimestampedFileInputSplit value) throws Exception {
if(value.toString().contains("done"))
FileMonitorWrapper.doneFound = true;
if(value.toString().contains("dat"));
FileMonitorWrapper.datFound = true;
if(FileMonitorWrapper.datFound && FileMonitorWrapper.doneFound) {
try {
if(value.getPath().toString().contains("done")) {
Files.move(Paths.get(FileMonitorWrapper.fileInputDir+"\\"+value.getPath().getName()),
Paths.get(FileMonitorWrapper.fileArchiveDir+"\\"+value.getPath().getName()));
}
}catch(Exception e){
e.printStackTrace();
}
return (!value.toString().contains("done"));
}
else
return false;
}
}
}
【问题讨论】:
-
“听起来很奇怪..任何想法” - 这是不可能的。一定有别的解释。
标签: java eclipse maven jar apache-flink