我正在构建一个自定义处理器来处理流文件,要处理流文件,我需要从本地文件系统中读取CSV文件。我创建了如下的财产描述符CSV_PATH
public static final PropertyDescriptor CSV_PATH = new
PropertyDescriptor
.Builder().name("CSV Path")
.displayName("CSV Path")
.description("CSV Path Reader")
.required(true)
.addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
.build();
@Override
protected void init(final ProcessorInitializationContext context) {
final List<PropertyDescriptor> descriptors = new
ArrayList<PropertyDescriptor>();
descriptors.add(JSON_PATH);
descriptors.add(CSV_PATH);
this.descriptors = Collections.unmodifiableList(descriptors);
final Set<Relationship> relationships = new HashSet<Relationship>();
relationships.add(SUCCESS);
this.relationships = Collections.unmodifiableSet(relationships);
}
现在,我想获取在配置处理器时在UI中设置的CSV_PATH属性的值。我无法获取CSV_PATH值。另外,如果我用代码对文件路径进行硬编码,那么仍然无法从本地文件系统读取CSV。
答案 0 :(得分:2)
您要使用以下代码从regex中检索PropertyDescriptor
的值:
@Override
public void onTrigger(final ProcessContext context, final ProcessSession session) {
FlowFile flowFile = session.get();
if (flowFile == null) {
return;
}
final String csvPath = context.getProperty(CSV_PATH).getValue();
// Do something with csvPath
}
如果您决定在该属性描述符中支持ProcessContext
,则还需要对此进行评估:
final String csvPath = context.getProperty(CSV_PATH).evaluateAttributeExpressions().getValue();
对此有其他方法替代,包括流文件属性,变量注册表,自定义装饰器等。
这被记录在NiFi Expression Language中。我最近做了一个Apache NiFi Developer's Guide,涵盖了自定义处理器开发,其中包括一些最佳实践和可能有用的示例。您还可以查看NiFi代码库中任何现有的处理器,以查看示例。