【记录下kettle自定义组件开发之路】

首先是 自定义组件的demo代码,可以从 下载地址 ,选择自己对应版本,进去后选择 plugins 文件夹, 然后选择zip包下载
在这里插入图片描述


下载完成后,我用的idea 打开的,打开后可以看到四个类
DemoStep,DemoStepData,DemoStepDialog,DemoStepMeta
四个类的功能以我自己理解大概说下,
首先是
DemoStepDialog 控制打开组件的布局样式,可以认为这个是前端,页面调试的。
DemoStepMeta 主要用来和DemoStepDialog 类一起用的,页面组件传值,我们要把它们分别存下来,就要靠这个类,同时这个类还有个至关重要的功能就是往后面传数据,这个后面我们单独讲。
DemoStep 这个就是业务逻辑类,主要的业务逻辑就是靠这个类。
DemoStepData 配合DemoStep 使用,取前后环境参数、系统参数使用。

我首先说下 我开发这个时候过程哈。
举个例子比如我想要连接一张表,并且需要获得到这张表的字段。
我是一个个打开系统自带组件,找类似的功能,这不,在 “插入/更新” 组件找到这个,我就去看这个组件的源码,把上述我说的四个类打开,最终实现自己想要的功能。

因为内网的原因,无法把代码贴图出来…

这里我就说几个注意点,

  1. *****Dialog 类,这个要多尝试获取才能适配到自己内心布局,毕竟SWT不是主流,大部分人还是不精通。 最好的就是找个系统自带的组件,复制源码,然后基于源码改,是最简单的。
  2. *****Meta 类 上面有注解,其中id 是唯一的,不能重复,categoryDescription是控制这个组件在kettle文件显示位置(输入,输出,转换?)。
    我们说下这个类的方法,getXml,loadXml,saveRep,readRep这四个可以直接参考系统组件源码对应的改,没啥说的,很简单。只要是getFields这个就是上面说,控制往后面组件传数据,需要 new一个ValueMetaString对象,一个对象代表一列。
    注意点:如果你使用了数据库组件,这个类要重写一个getUserDatabaseConnections方法,只有重写了这个方法,你将这个ktr发给别人,别人运行的话才能回显你配置的数据库连接,要不然别人打开的话,数据库是空的。
  3. DemoStep也说两个注意点,一个是获取命令行参数的问题,因为页面可以通过配置${**}获取参数值,实现灵活配置,通过environmentSubsrttute("配置参数名 ")获取。
    第二个是给后面数据传结果的问题,有的组件就是单纯的转换,不需要传结果,只需要init方法 中 加上super.init(smi,sdi)判断。然后返回true,再在processRow方法里面加上setOutputDone(); return false;既可不结果给后面参数,
    需要要传参数,init方法不变,在processRow中首先要掉Meta的getFields方法,然后在putRow(Object[]);Object[]是已经拼装好的返回数组, 如果有多行的话,你就返回true,他会再次执行DemoStep的processRow方法,直到你返回false为止。

插件集成

在kettle 安装目录的 plugins文件下新建my-step-plugin文件夹,并将kettle-sdk-step-plugin-**.jar复制到文件夹下。
启动spoon.bat 就能在转换中看到对应的demo step


远程调试

改Spoon.bat脚本,在if “%PENTAHO_DI_JAVA_OPTIONS%”==“” set PENTAHO_DI_JAVA_OPTIONS=“-Xms1024m” “-Xmx2048m” “-XX:MaxPermSize=256m” 后面增加一行debug信息 -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8888

重新启动kettle,在idea中新建remote ,并修改port为刚才spoon.bat中增加的端口,这里是10001
运行idea的debug,在相应的代码上打断点,kettle中运行这个转换,就会进入到我们的断点中,可以进行远程调试了。


最后再加个 用命令行执行ktr文件,并带命令行参数 首先找到kettle客户端文件夹下的Pan文件,
执行命令:****\pan /file 执行的ktr路径.ktr “/param:参数名A=“参数值A”” “/param:参数名B=“参数值B””

我个人觉得 自定义组件最好的学习办法就是看系统组件的源码,然后一遍遍尝试,终能成功!

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值