nifi自定义Processor使用Service

刚开始做的时候去翻了好半天nifi的源码,没太搞清自定义Processor怎么使用Service作为属性,后来发现其实nifi对Processor的拓展提供了丰富的API,完全不需要像源码中那样使用,下面是使用方法,关于如何创建自定义Processor工程的文章网上有不少,都还不错,这里主要讲Service的使用,本例子用了数据库访问相关的Service:

首先要添加两个依赖:

1.相关接口api依赖:

        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-dbcp-service-api</artifactId>
            <version>1.9.2</version>
            <scope>provided</scope>
        </dependency>

该依赖因为有<scope>provided</scope>所以只有在测试和编译的时候使用,而不会打包进项目里,如需其他相关的Service则需要去maven上输入nifi搜索,本例中使用的是关系型数据库相关依赖,如果只添加该依赖可以打包成功,但是丢到nifi上的时候不能正常运行,会报错找不到Service相关包,为此找了好久,终于在一个外国网站上找到解决办法,需要再添加如下依赖。

2.Service实例依赖:

        <dependency>
            <groupId>org.apache.nifi</groupId>
            <artifactId>nifi-standard-services-api-nar</artifactId>
            <version>1.9.2</version>
            <type>nar</type>
        </dependency>

添加该依赖后自定义Processor就可以使用Service作为属性了,但如果只添加该依赖不添加相关接口api的话则无法通过编译。

然后在项目中添加Service类型属性:

public static final PropertyDescriptor DBCP_SERVICE = new PropertyDescriptor.Builder()
            .name("Database Connection Pooling Service")
            .description("用于数据库连接的服务")
            .required(true)
            .identifiesControllerService(DBCPService.class)
            .build();

其中.identifiesControllerService(DBCPService.class)确定了Service的类型,本例中使用的是关系型数据库的连接Service

最后在void onTrigger()方法中使用该属性:

DBCPService dbcpService = context.getProperty(DBCP_SERVICE).asControllerService(DBCPService.class);
Connection connection =  dbcpService.getConnection();

关系型数据库连接Service提供了getConnection方法来获取相关链接,完成上述步骤之后使用mvn clean install命令打包将打包好的nar进行部署,效果如下:

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值