Le DBCPConnectionPool Service
nécessite 5 parameters de connexion pour établir la connexion à une firebase database, comme illustré ci-dessous [Jaune marqué]
J’ai utilisé UpdateAtsortingbute Processor
pour append manuellement ces 5 parameters de connexion et leur donner leurs valeurs respectives comme indiqué dans l’image ci-dessous [Jaune marqué]
Maintenant, lorsque j’essayais de lire les valeurs des parameters de connexion dans DBCPConnectionPool Service
via ces atsortingbuts ( DBCPConnectionPool Service
ci -dessous) , je n’ai pas pu les lire.
Pour connaître la raison pour laquelle le DBCPConnectionPool Service
n’a pas pu lire les atsortingbuts Flowfile, je suis allé de l’avant pour vérifier le code source du DBCPConnectionPool Service
UpdateAtsortingbute Processor
et UpdateAtsortingbute Processor
.
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-atsortingbute-bundle/nifi-update-atsortingbute-processor/src/main/java/org/apache/nifi/ processeurs / atsortingbuts / UpdateAtsortingbute.java
Code DBCPConnectionPool Service
pour le DBCPConnectionPool Service
:
Code UpdateAtsortingbute Processor
pour le UpdateAtsortingbute Processor
:
Ainsi, j’ai appris la raison pour laquelle il était impossible de lire les valeurs des atsortingbuts FlowFile. Cela est dû au fait que ExpressionLanguageScope
est limité à VARIABLE_REGISTRY
et non à FLOWFILE_ATTRIBUTES
.
Maintenant, ma question est la suivante: pourquoi le service ExpressionLanguageScope
pour DBCPConnectionPool Service
est limité à VARIABLE_REGISTRY
. Quelle est la raison de cette limitation? La raison pour laquelle je pose cette question est que je veux lire les valeurs des parameters de connexion via les atsortingbuts FlowFile.
Pour la même question posée dans la liste de diffusion de NiFi dev , Andy y avait répondu de la meilleure façon possible. La raison pour DBCPConnectionPool
services DBCPConnectionPool
ou tout service de contrôleur à cet égard, utilisant ExpressionLanguageScope.VARIABLE_REGISTRY
est que les services du contrôleur n’ont pas access aux fichiers de stream, de sorte qu’il ne lira pas les atsortingbuts des fichiers de stream. Et pour la question, pourquoi il ne supporte que VARIABLE_REGISTRY
est:
VARIABLE_REGISTRY
été introduit était d’éviter d’exposer les valeurs sensibles, ce qui est le cas lorsque nous transmettons des valeurs telles que les atsortingbuts flowfile. Les services de contrôleur correspondent à ce cas, car beaucoup d’entre eux utilisent des propriétés sensibles telles que le Password
. Et si vous supposez que vous pouvez le faire fonctionner simplement en changeant la scope de ces propriétés en ExpressionLanguageScope.FLOWFILE_ATTRIBUTES
, vous vous trompez. Les changer n’a aucun sens et ne fonctionne pas, la raison en est que les services du contrôleur n’ont jamais access aux fichiers de stream.
S’il existe une exigence spécifique pour vous dans laquelle vous devez utiliser différentes valeurs de propriété pour différents fichiers de stream, Andy dans le processus de développement d’origine a partagé certains liens que je posterai à nouveau: