java中調用kettle轉換檔,java調用kettle轉換
java中調用kettle轉換檔
通過命令列也可以調用,然後java中調用命令列代碼也可以;這樣沒有和java代碼邏輯無縫整合。本文說明kettle5.1中如果通過其他API和java代碼無縫整合;網上大多數資料都是低版本的,在kettle5.x中已經不能運行。
1、 需要哪些jar檔案
以kettle開頭的是必須,最下面三個也要;紅色框中的兩個是我測試轉換用到的,分別是產生UUID和檔案。
要是少了jar檔案,運行程式一定報錯,大家根據錯誤到kettle安裝目錄LIB中找相應的jar加到編譯路徑中。
2、 樣本說明如何通過java調用轉換
樣本是把一個excel的內容匯入到資料中,excel只有兩列,所以需要在kettle中產生一列uuid,然後匯入到資料庫中。
預設產生的uuid有‘-’間隔符,所以通過“Replace in string”替換為空白;
excel步驟,使用了具名引數,所以要在轉換配置設定具名引數。
範例程式碼如下:
publicclass KettleUtil2 { public String RES_DIR = "res"; private String fullFileName ; public KettleUtil2(String fileName){ fullFileName = System.getProperty("user.dir") + File.separator + RES_DIR; fullFileName += File.separator + fileName; } /** * 沒有參數是,設定參數為null * @param paras */ publicvoid runTransformation(Map<String,String> paras) { try { KettleEnvironment.init(); TransMeta transMeta = new TransMeta(fullFileName); Trans transformation =new Trans(transMeta); for(Map.Entry<String, String> entry: paras.entrySet()) { transformation.setParameterValue(entry.getKey(), entry.getValue()); } transformation.execute(null); transformation.waitUntilFinished(); if (transformation.getErrors() > 0) { thrownew RuntimeException( "There wereerrors during transformation execution."); } } catch (KettleException e) { System.out.println(e); } }}
最後調用代碼如下:
publicclass EtlTest { publicstaticvoid main(String[] args) { KettleUtil2 etl = new KettleUtil2("testimport.ktr"); Map<String,String> para = new HashMap<String,String>(); //給轉換中具名引數賦值 para.put("XlsName", "data"); etl.runTransformation(para); }}
在kettle的圖形介面中可以直接實現資料幫浦與轉換 為何還要先儲存成ktr檔案然後用java程式調用
都可運行,非圖形介面運行可減少圖形介面消耗的資源,且運行方式很多種,例形介面運行、命令列調用運行、程式調用運行、遠程機子運行(叢集運行)等。
java調用本地的job怎按時間組建記錄檔, kettle
你使用log4j就可以了,配置如下:
<appender name="PROJECT" class="org.apache.log4j.DailyRollingFileAppender"> <param name="File" value="/xxx/xxx/xxx.log"/> <param name="DatePattern" value="'.'yyyyMMdd'.log'"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{MMdd HH:mm:ss SSS},%m%n"/> </layout> </appender>