kettle遵循著外掛程式機制,基於外掛程式使得kettle整個結構非常清晰,耦合性低,移植性強,特別是對kettle進行二次開發尤其方便,根據了解,擴充套件step型別的外掛程式比較多,具體步驟可以參考: 。通過了解外掛程式的載入流程,不僅kettle的原理有深一層的認識,還有助於在進行二次開發遇到問題的時候進行定位(例如,最近遇到個情況就是通過kettle api建立資源庫,但在使用spoon工具儲存轉換到該資源庫時出錯,其實就是因為資源庫中step型別與實際中step外掛程式不一致導成的,造成不一致的原因是因為通過api建立資源庫時kettle環境中載入不到某些外掛程式資訊),本文是基於kettle5.x,外掛程式型別很多,選取stepplugintype型別為例進行描述。
pluginregistry是乙個提供所有訪問所有kettle外掛程式的單例。可以通過它註冊外掛程式型別以及外掛程式,還可以查詢每種類別的外掛程式,挑幾個以下會用到的屬性進行說明註冊pluginregistryplugintype外掛程式型別,並獲得該型別的外掛程式並載入初始化,最後儲存到list extensions,可以不關注該步驟
呼叫registerplugintype(stepplugintype)方法進行註冊:
把stepplugintype新增到pluginmap中,如果stepplugintype未註冊,則初始化乙個空的list用來儲存該外掛程式型別的具體外掛程式
把stepplugintype新增到categorymap中,如果stepplugintype未註冊,則初始化乙個空的list來儲存該外掛程式型別的類目
把外掛程式型別註冊之後,根據該型別查詢所有該型別的具體外掛程式,它會通過3種方式來載入:
registernatives():查詢原生的step外掛程式。首先載入kettle-steps.xml(該配置檔案在kettle-engine模組中)獲取裡面所有step配置,可以在環境變數中設定「kettle_core_steps_file」來覆蓋預設的kettle-steps.xml;然後呼叫registerpluginfromxmlresource()
,解析出step所有的屬性,根據屬性構造出來個plugin物件;接著,把該外掛程式資訊儲存到pluginmap與categorymap對應外掛程式型別的value(list)中;最後 ,觸發該外掛程式型別的新增、改變外掛程式的事件 。
registerpluginjars():根據jar包註冊外掛程式(通過註解方釋來描述外掛程式)。首先,windows下先會預設從[plugins, plugins\steps, c:\users\administrator\.kettle\plugins, c:\users\administrator\.kettle\plugins\steps]
這幾個目錄中查詢stepplugintype型別的外掛程式jar包;然後,呼叫handlepluginannotation():通過註解解析出所有外掛程式相關的描述屬性,並構造plugin物件;接著,把該外掛程式資訊儲存到pluginmap與categorymap對應外掛程式型別的value(list)中;最後 ,觸發該外掛程式型別的新增、改變外掛程式的事件 。
registerxmlplugins():根據xml配置檔案註冊外掛程式。首先,windows下先會預設從[plugins, plugins\steps, c:\users\administrator\.kettle\plugins, c:\users\administrator\.kettle\plugins\steps]
這幾個目錄中查詢stepplugintype型別外掛程式的配置檔案:***plugin.xml;然後,解析節點內容,並呼叫registerpluginfromxmlresource(),解析出step所有的屬性,根據屬性構造出來個plugin物件;接著,把該外掛程式資訊儲存到pluginmap與categorymap對應外掛程式型別的value(list)中;最後 ,觸發該外掛程式型別的新增、改變外掛程式的事件 。
還可以從環境變數中讀取「kettle_plugin_classes」的值,從中載入指定的外掛程式,該方法對除錯模式非常有利,可以通過在eclipse中啟動spoon時新增vm arguments:
dkettle_plugin_classes=org.pentaho
.di.trans
.steps
.gpload
.gploadmeta,org.pentaho
.di.core
.database
.palodatabasemeta //以逗號隔開
kettle 外掛程式開發
kettle core kettle的核心模組,包括一些資料處理等。kettle dbdialog kettle資料庫連線介面邏輯。kettle engine kettle的引擎,負責執行kettle的具體作業和轉換的邏輯,並會呼叫core模組。kettle ui swt 使用者介面模組,包括使用者...
Kettle開發流程
回到啟動介面 注意 建立資源庫時不要使用中文 因為在配置資源庫時使用中文,可能導致repositories.xml出現亂碼。然後導致你為了解決connect按鈕不見的問題不斷的刪除檔案重啟kettle。同時,也是會發現,我們的資料庫裡面有很多資料庫已經建立好了 2.簡單demo 在目標庫中新建一張表...
Kettle外掛程式開發(Job)
乙個 kettle 的job 外掛程式主要包括兩個類,和轉換步驟外掛程式一樣,乙個是用於客戶端定義引數配置的 ui dialog 類,乙個是 job entry 類,主要是跟蹤儲存客戶的配置資訊和執行 job具體的功能 在 execute 方法中執行 1 ui dialog類。ui dailog 類...