java調用kettle向job(任務)和transformation(轉換)傳遞參數執行個體

來源:互聯網
上載者:User
      最近要對一個系統的資料同步到另一個系統中,要求新系統的資料結果完成之後,即時同步到另一個系統資料表中。
      也就是動態傳一個關聯的ID。由於舊系統是vb做的,無法提供webservice介面,並且同步的表涉及到十幾張表,並且兩個系統資料表結構完全不一樣,所以想到了kettle。
      java整合kettle網上有現成的執行個體,很簡單。如:http://bakcom.iteye.com/blog/1399587

      雖然網上文章有說java可以傳遞參數給kettle,不過只找到了傳遞參數給轉換的文章,沒有講參數傳遞給job,kettle中如何使用java傳遞的參數。今天就以上問題,一併共用。

/** * 本測試類別慎用。。。。。。。 *  * @param args */public static void main(String[] args) {String datetime = "2014-12-19 23:20:45";String[] params = {"707", datetime}; // 傳遞參數 String path = "F:\\job7.kjb";//runTransfer(params, path);runJob(params, path);// runJob();//jbResource();}/**  * 運行轉換檔方法 * @param params 多個參數變數值 * @param ktrPath 轉換檔的路徑,尾碼ktr */public static void runTransfer(String[] params, String ktrPath) {Trans trans = null;try {// // 初始化// 轉換元對象KettleEnvironment.init();// 初始化EnvUtil.environmentInit();TransMeta transMeta = new TransMeta(ktrPath);// 轉換trans = new Trans(transMeta);// 執行轉換trans.execute(params);// 等待轉換執行結束trans.waitUntilFinished();// 拋出異常if (trans.getErrors() > 0) {throw new Exception("There are errors during transformation exception!(傳輸過程中發生異常)");}} catch (Exception e) {e.printStackTrace();}}/** * java 調用 kettle 的job *  * @param jobname *            如: String fName= "D:\\kettle\\informix_to_am_4.ktr"; */public static void runJob(String[] params, String jobPath) {try {KettleEnvironment.init();// jobname 是Job指令碼的路徑及名稱JobMeta jobMeta = new JobMeta(jobPath, null);Job job = new Job(null, jobMeta);// 向Job 指令碼傳遞參數,指令碼中擷取參數值:${參數名}// job.setVariable(paraname, paravalue);job.setVariable("id", params[0]);job.setVariable("dt", params[1]);job.start();job.waitUntilFinished();if (job.getErrors() > 0) {throw new Exception("There are errors during job exception!(執行job發生異常)");}} catch (Exception e) {e.printStackTrace();}}


<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">以上是片段。實現了調用任務和轉換的方法,我只給出了調用任務和轉換檔的方法,串連資料庫的在此略過。</span>

下面就是如何使用java傳遞的參數了。

轉換的網上有例子,轉換工作台,開啟輸入,找到“擷取系統資訊”


進行變數定義,選擇命令參數1。。。n即可



就可以引用我樣本中的1,2參數了。

但是我們的遷移工作是要按順序執行的,調用轉換不夠用,需要job來定義執行順序,

比如上面的轉換作為第一步,操作完進行其他步驟,那麼在這個基礎上,可以畫一個job




這時候問題來了,我們要活得java的資料,同時這個job需要把參數傳遞給test2轉換使用。

其實很簡單,點開test2,切換到參數選型,將java定義的參數寫進去,記住帶{}



這樣就大功搞成了。java已經能夠順利的將值傳遞給job,job可以順利的將值傳遞給轉換。

點擊run this job 在variable中定義參數名稱跟java傳遞的參數一致,可以寫值進行測試。


注意事項:任務和轉換要存成檔案格式,任務中引用的轉換也要是檔案格式,

否則就都需要資料庫支撐,資料庫方法調用了。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.