代码之家  ›  专栏  ›  技术社区  ›  Rishab Prasad

为什么DBCPConnectionPool服务中的ExpressionLanguageScope仅限于“VARIABLE\u REGISTRY”,而不限于“FLOWFILE\u ATTRIBUTES”?

  •  2
  • Rishab Prasad  · 技术社区  · 7 年前

    这个 DBCPConnectionPool Service 需要5个连接参数才能建立到数据库的连接,如下图所示 [标记为黄色] enter image description here

    我用过 UpdateAttribute Processor 手动添加这5个连接参数,并给它们各自的值,如下图所示 [标记为黄色] enter image description here

    现在,当我试图读取中连接参数的值时 DBCPConnectionPool服务 通过这些属性 (如下图所示) ,我看不懂。 enter image description here

    了解 DBCPConnectionPool服务 无法读取Flowfile属性,我继续检查这两个属性的源代码 DBCPConnectionPool服务 更新属性处理器

    https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java

    https://github.com/apache/nifi/blob/master/nifi-nar-bundles/nifi-update-attribute-bundle/nifi-update-attribute-processor/src/main/java/org/apache/nifi/processors/attributes/UpdateAttribute.java

    源代码 DBCPConnectionPool服务 : enter image description here

    源代码 更新属性处理器 : enter image description here

    因此,我了解了它无法从FlowFile属性读取值的原因。这是因为 ExpressionLanguageScope 仅限于 VARIABLE_REGISTRY 而不是 FLOWFILE_ATTRIBUTES

    现在,我的问题是为什么 表达式语言范围 对于 DBCPConnectionPool服务 仅限于 VARIABLE\u注册表 .这一限制的原因是什么?我之所以问这个问题,是因为我想通过FlowFile属性读取连接参数的值。

    1 回复  |  直到 7 年前
        1
  •  6
  •   Sivaprasanna Sethuraman    7 年前

    对于在 NiFi dev mailing list ,安迪以最好的方式回答了这个问题。原因是 DBCPConnectionPool 服务或任何控制器服务 ExpressionLanguageScope.VARIABLE_REGISTRY 控制器服务 访问流文件,使其不会读取流文件的属性。至于问题,为什么它只支持 VARIABLE_REGISTRY 是:

    • 仅仅因为它不读取flowfile属性并不意味着它不应该使用其他地方的属性。
    • 其中一个主要原因 VARIABLE\u注册表 引入是为了避免暴露敏感值,当我们传递诸如flowfile属性之类的值时,就会出现这种情况。控制器服务适合这种情况,因为其中许多服务使用敏感属性,如 Password

    如果您假设可以使其工作,只需将这些属性的范围更改为 ExpressionLanguageScope.FLOWFILE_ATTRIBUTES ,你错了。更改它们毫无意义,也不起作用,原因再次是控制器服务无法访问流文件。

    如果您有特定的要求,需要对不同的流文件使用不同的属性值,那么原始开发线程中的Andy已经共享了一些链接,我将再次发布这些链接: