我目前正在尝试获取使用ExecuteScript指定的两个日期之间的流文件中所有日期的列表。但是我不知何故获得了空属性。
以下是我对指定的startdate
和enddate
变量指定的ExecuteScript Groovy代码:
flowFile = session.get();
if(!flowFile)
return;
DATE_FORMAT = 'dd-MM-yyyy';
startDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("startdate"));
endDate = Date.parse(DATE_FORMAT, flowFile.getAttribute("enddate"));
allDates = "";
Calendar calendar = Calendar.getInstance();
Set allDates = new LinkedHashSet();
numbers = TimeUnit.MILLISECONDS.toDays(Math.abs(endDate - startDate))
for (int i = 1; i <= numbers; i++) {
calendar.setTime( startDate );
calendar.add( Calendar.DATE, i );
}
days.each {
day -> allDates = allDates + day + "\n";
}
flowFile = session.putAttribute(flowFile,"allDates", allDates );
session.transfer(flowFile,REL_SUCCESS)
在我的传出队列中,我发现属性allDates
为空字符串
我的代码出了什么问题?
答案 0 :(得分:2)
您的代码有问题
例如变量allDates
在两个不同的作用域中两次声明:
全局(无类型或def)
allDates = "";
和本地(带有类型)
Set allDates = new LinkedHashSet();
之后,很难预测使用了哪一个
实际上,使用Groovy编写代码可能会更容易:
def DATE_FORMAT = 'dd-MM-yyyy';
def startDate = Date.parse(DATE_FORMAT, '01-11-1970');
def endDate = Date.parse(DATE_FORMAT, '09-11-1970');
def allDates = ""
for (def d = startDate; d<=endDate; d++){
allDates+=d.format(DATE_FORMAT)+"\n"
}
println allDates
请注意,这是可运行的代码,因此您可以在集成到nifi中之前使用groovyconsole或任何IDE对其进行调试
原因,在nifi中使用
之前,必须将其与流文件处理一起包装