日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件

發(fā)布時(shí)間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

該kettle插件功能類似kettle現(xiàn)有的定義java類插件,自定java類插件主要是支持在kettle中直接編寫java代碼實(shí)現(xiàn)自定特殊功能,而本控件主要是將自定義代碼轉(zhuǎn)移到j(luò)ar包,就是說(shuō)自定義功能的實(shí)現(xiàn)改為在eclipse等ide中開發(fā)。

設(shè)計(jì)本插件的原因是直接在kettle中寫java代碼是很不容易的事,開發(fā)體驗(yàn)與eclipse差得遠(yuǎn),java語(yǔ)法還要受到限制,調(diào)試麻煩。實(shí)現(xiàn)點(diǎn)簡(jiǎn)單的邏輯還行,稍微復(fù)雜一點(diǎn)就比較麻煩,需要對(duì)java和kettle相關(guān)接口很熟悉。而簡(jiǎn)單的功能可以采用javascript腳本實(shí)現(xiàn),復(fù)雜的功能一般人很難直接在自定義java類控件中編寫java實(shí)現(xiàn)。

有人說(shuō)可以每次直接開發(fā)新插件,雖然說(shuō)java的插件機(jī)制還是很不錯(cuò)的,但開發(fā)一個(gè)插件還是沒那么容易的,需要設(shè)計(jì)元數(shù)據(jù),插件件功能實(shí)現(xiàn),插件操作界面設(shè)計(jì)等,其中操作界面的調(diào)整是我最不愿意花時(shí)間的,慢慢調(diào)我也能調(diào)出常見控件的配置界面,但我覺得沒必要,所以要實(shí)現(xiàn)一個(gè)完善的插件需要做的事情還是很多的。

而本插件綜合了以上兩種機(jī)制,既有自定義java類的簡(jiǎn)單性,直接編寫核心業(yè)務(wù)代碼,操作界面統(tǒng)一使用一個(gè)JSON對(duì)象作為參數(shù)設(shè)置途徑,所以基于此開發(fā)功能,只需繼承一個(gè)基類而編寫一個(gè)功能實(shí)現(xiàn)類就可以了;又有直接開發(fā)插件的便捷性,只需將相關(guān)的jar包作為用戶類庫(kù)導(dǎo)入項(xiàng)目,創(chuàng)建一個(gè)類,繼承基類,就可以在eclipse中盡情的編寫你的業(yè)務(wù)代碼了。

該插件已經(jīng)作為我的另一個(gè)開源項(xiàng)目kettle管理平臺(tái)(http://www.cnblogs.com/majinju/p/5739820.html)的一個(gè)子項(xiàng)目開源,相關(guān)代碼可以從github上那個(gè)項(xiàng)目中獲取,下面介紹下基于該插件開發(fā)實(shí)現(xiàn)自己業(yè)務(wù)的插件。

在eclipse中創(chuàng)建用戶類庫(kù)ku,到kettle管理平臺(tái)項(xiàng)目介紹的博文中下載0.1.0版部署包,然后將部署包的lib目錄中的jar全部加入。

在eclipse中創(chuàng)建一個(gè)java項(xiàng)目,添加上一步創(chuàng)建的用戶類庫(kù)到構(gòu)建路徑,然后新建一個(gè)java類,以下是轉(zhuǎn)換步驟實(shí)現(xiàn)代碼樣例。

/*** Project Name:KettleUtil

* Date:2016年6月29日

* Copyright (c) 2016, jingma All Rights Reserved.*/

packagenet.oschina.kettleutil.utilrun;importnet.oschina.kettleutil.KettleUtilRunBase;importnet.oschina.mytuils.KettleUtils;importorg.pentaho.di.core.row.RowMetaInterface;importorg.pentaho.di.core.row.ValueMeta;importorg.pentaho.di.core.variables.VariableSpace;importorg.pentaho.di.trans.TransMeta;importorg.pentaho.di.trans.step.StepMeta;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;/*** kettle util 運(yùn)行示例

* date: 2016年6月29日

*@authorjingma

*@version

*/

public class KurDemo extendsKettleUtilRunBase{/*** 具體處理每一行數(shù)據(jù)

*@seenet.oschina.kettleutil.KettleUtilRunBase#disposeRow(java.lang.Object[])*/@Overrideprotected voiddisposeRow(Object[] outputRow) {//設(shè)置JOB名稱

outputRow[getFieldIndex("JOB_NAME")] =KettleUtils.getRootJobName(ku);

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#init()*/@Overrideprotected voidinit() {

ku.logBasic("初始化插件");

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#end()*/@Overrideprotected voidend() {

ku.logBasic("數(shù)據(jù)處理結(jié)束");

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#getDefaultConfigInfo(org.pentaho.di.trans.TransMeta, java.lang.String)*/@Overridepublic String getDefaultConfigInfo(TransMeta transMeta, String stepName) throwsException{//創(chuàng)建一個(gè)JSON對(duì)象,用于構(gòu)建配置對(duì)象,避免直接拼字符串構(gòu)建JSON字符串

JSONObject params = newJSONObject();//設(shè)置一個(gè)參數(shù)key1

params.put("key1", "");

RowMetaInterface fields=transMeta.getPrevStepFields(stepName);if(fields.size()==0){throw new RuntimeException("沒有獲取到上一步驟的字段,請(qǐng)確認(rèn)連接好上一步驟");

}

params.put("PrevInfoFields", fields.toString());//創(chuàng)建一個(gè)JSON數(shù)組對(duì)象,用于存放數(shù)組參數(shù)

JSONArray arr = newJSONArray();

arr.add("arr1");

arr.add("arr2");

params.put("array", arr);//生成的參數(shù)樣例//{//"array":[//"arr1",//"arr2"//],//"key1":""//}//返回格式化后的默認(rèn)JSON配置參數(shù),供使用者方便快捷的修改配置

return JSON.toJSONString(params, true);

}public voidgetFields(RowMetaInterface r, String origin, RowMetaInterface[] info, StepMeta nextStep, VariableSpace space) {//添加輸出到下一步的字段

addField(r,"JOB_NAME",ValueMeta.TYPE_STRING,ValueMeta.TRIM_TYPE_BOTH,origin,"JOB名稱");

}

}

3. 以下是作業(yè)實(shí)體插件實(shí)現(xiàn)樣例

/*** Project Name:KettleUtil

* Date:2016年6月29日

* Copyright (c) 2016, jingma All Rights Reserved.*/

packagenet.oschina.kettleutil.utilrun;importnet.oschina.kettleutil.jobentry.JobEntryKettleUtilRunBase;importcom.alibaba.fastjson.JSON;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;/*** job entry kettle util 運(yùn)行示例

* date: 2016年6月29日

*@authorjingma

*@version

*/

public class JeurDemo extendsJobEntryKettleUtilRunBase{/***

*@seenet.oschina.kettleutil.jobentry.JobEntryKettleUtilRunBase#run()*/@Overrideprotected boolean run() throwsException {//這里寫自己的業(yè)務(wù)

jeku.logBasic(jeku.getConfigInfo());

jeku.logBasic(configInfo.toJSONString());return true;

}/***

*@seenet.oschina.kettleutil.KettleUtilRunBase#getDefaultConfigInfo(org.pentaho.di.trans.TransMeta, java.lang.String)*/@Overridepublic String getDefaultConfigInfo() throwsException{//創(chuàng)建一個(gè)JSON對(duì)象,用于構(gòu)建配置對(duì)象,避免直接拼字符串構(gòu)建JSON字符串

JSONObject params = newJSONObject();//設(shè)置一個(gè)參數(shù)key1

params.put("key1", "");//創(chuàng)建一個(gè)JSON數(shù)組對(duì)象,用于存放數(shù)組參數(shù)

JSONArray arr = newJSONArray();

arr.add("arr1");

arr.add("arr2");

params.put("array", arr);//生成的參數(shù)樣例//{//"array":[//"arr1",//"arr2"//],//"key1":""//}//返回格式化后的默認(rèn)JSON配置參數(shù),供使用者方便快捷的修改配置

return JSON.toJSONString(params, true);//return "select *\n from dual";

}

}

4. 開發(fā)完成后,打包放入kettle lib中,重啟kettle。以下是該插件配置界面,可以修改步驟名稱,在類名稱處填寫你的實(shí)現(xiàn)類的完整類路徑,然后就可以點(diǎn)擊【獲取默認(rèn)配置】按鈕,獲取你配置的實(shí)現(xiàn)類對(duì)應(yīng)的配置信息,根據(jù)需要修改即可完成配置。以下分別是轉(zhuǎn)換的插件實(shí)現(xiàn)示例和作業(yè)實(shí)體實(shí)現(xiàn)示例截圖。

以上就完成了基于該插件的開發(fā)使用工作,由上可以看出,執(zhí)行編寫一個(gè)類,就可以完成一個(gè)插件的開發(fā)工作。

總結(jié)

以上是生活随笔為你收集整理的kettle中java组件_kettle系列-[KettleUtil]kettle插件,类似kettle的自定义java类控件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。