如何在NiFi自定义Controller Service中引用标准Cassandra连接控制器服务
解决方案
完全可以在自定义Controller Service中引用NiFi官方标准Controller Service,你遇到的问题是NiFi的类隔离机制导致的,按以下步骤调整即可:
1. 调整API模块依赖scope
你自定义Controller Service的API/实现模块中,nifi-cassandra-services-api依赖需要设置scope为provided,避免将API类打包到你自己的组件包中,导致和官方服务加载的API类不匹配:
<dependency> <groupId>org.apache.nifi</groupId> <artifactId>nifi-cassandra-services-api</artifactId> <version>1.13.2</version> <scope>provided</scope> </dependency>
2. 新增nar模块对官方Cassandra服务nar的依赖
NiFi每个nar包都有独立类加载器,需要在你自定义组件的nar模块pom中,添加官方nifi-cassandra-services-nar的依赖,明确类加载继承关系:
<dependency> <groupId>org.apache.nifi</groupId> <artifactId>nifi-cassandra-services-nar</artifactId> <version>1.13.2</version> <type>nar</type> <scope>provided</scope> </dependency>
3. 代码验证
确认你代码中导入的CassandraSessionProviderService是官方包路径:
import org.apache.nifi.cassandra.services.CassandraSessionProviderService;
不要引用你项目中自定义的重名类。
4. 部署验证
重新打包你的自定义nar,放到NiFi的lib目录,同时确认官方的nifi-cassandra-services-nar-1.13.2.nar也存在于lib目录,重启NiFi后即可在属性下拉框看到已有的Cassandra连接服务。
内容的提问来源于stack exchange,提问作者Mimerr
相关产品推荐
相关产品推荐

