(1).参照“java调用kettle_导入jar包(1)”,应用etl工具下lib里的所有jar

(2).

最近要对一个系统的数据同步到另一个系统中,要求新系统的数据结果完成之后,实时同步到另一个系统数据表中。
      也就是动态的传一个关联的ID。由于旧系统是vb做的,无法提供webservice接口,并且同步的表涉及到十几张表,并且两个系统表结构完全不一样,所以想到了kettle。
      java集成kettle网上有现成的实例,很简单。如:http://bakcom.iteye.com/blog/1399587

虽然网上文章有说Java可以传递参数给kettle,不过只找到了传递参数给转换的文章,没有讲参数传递给job,kettle中如何使用java传递的参数。今天就以上问题,一并共享。

import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.util.EnvUtil;
import org.pentaho.di.job.Job;
import org.pentaho.di.job.JobMeta;
import org.pentaho.di.trans.Trans;
import org.pentaho.di.trans.TransMeta;

public class tests {

/**
     * 本测试类慎用!!!!!!!
     *  
     * @param args
     */  
    public static void main(String[] args) {  
       String datetime = "2014-12-19 23:20:45";  
       String[] params = {"707", datetime}; // 传递参数   
       String path = "E:\\job.kjb";
       for (int i = 0; i < 3; i++) {
           params[0] += i;
           runJob(params, path);  
    }
    }  
 
    /**  
     * 运行转换文件方法
     * @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]);  
            System.err.println(params[0]+"=========="+params[1]);
            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();  
        }  
    }

}

下面就是如何使用java传递的参数了。

转换的网上有例子,转换工作台,打开输入,找到“获取系统信息”

进行变量定义,选择命令参数1。。。n即可

就可以引用我示例中的1,2参数了。

但是我们的迁移工作是要按顺序执行的,调用转换不够用,需要job来定义执行顺序,

比如上面的转换作为第一步,操作完进行其他步骤,那么在这个基础上,可以画一个job

这时候问题来了,我们要活得java的数据,同时这个job需要把参数传递给test2转换使用。

其实很简单,点开test2,切换到参数选型,将java定义的参数写进去,记住带{}

这里的参数指的是“位置参数”

这样就大功搞成了。java已经能够顺利的将值传递给job,job可以顺利的将值传递给转换。

点击run this job 在variable中定义参数名称跟java传递的参数一致,可以写值进行测试

注意事项:任务和转换要存成文件格式,任务中引用的转换也要是文件格式,

否则就都需要数据库支撑,数据库方法调用了。

            来源:http://blog.csdn.net/dirful/article/details/42026545#comments

java调用kettle_实现(2)的更多相关文章

  1. java调用kettle_导入jar包(1)

    版权声明:本文为博主原创文章,未经博主允许不得转载. Java调用Kettle执行任务或转换,需要使用Kettle中的jar,可以先导入lib目录中的几个基本的jar,如:kettle-core.ja ...

  2. JAVA调用 keytool 生成keystore 和 cer 证书

    keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体( ...

  3. java调用mysql服务做备份与恢复

    首先添加mysql的bin到环境变量,这样可以简写部分命令,并且做到不依赖系统mysql的具体安装路径. 重启计算机可以让添加的环境变量在java代码中调用时生效.(cmd中生效但java中调用没有生 ...

  4. 存储过程详解与java调用(转)

    存储过程的一些基本语法: --------------创建存储过程----------------- CREATE PROC [ EDURE ] procedure_name [ ; number ] ...

  5. c++ c# java 调用 c++ 写的dll

    1. vs 中新建win32 dll 项目   testdll 添加实现文件       test.cpp #include "stdafx.h" #include <ios ...

  6. Java调用第三方dll文件的使用方法 System.load()或System.loadLibrary()

    Java调用第三方dll文件的使用方法 public class OtherAdapter { static { //System.loadLibrary("Connector") ...

  7. 【转】java调用webservice

    互联网上面有很多的免费webService服务,我们可以调用这些免费的WebService服务,将一些其他网站的内容信息集成到我们的Web应用中显示,下面就以获取天气预报数据和查询国内手机号码归属地为 ...

  8. 分享:写了一个 java 调用 C语言 开发的动态库的范例

    分享:写了一个 java 调用 C语言 开发的动态库的范例 cfunction.h   代码#pragma once#ifdef __cplusplusextern "C" {#e ...

  9. 分享:根据webservice WSDL地址自动生成java调用代码及JAR包

    分享:根据webservice WSDL地址自动生成java调用代码及JAR包使用步骤:一.安装java 并配置JAVA_HOME 及 path二.安装ANT 并配置ANT_HOME三.解压WsdlT ...

随机推荐

  1. C-IDE使用指南

    HI  您好: 亲爱的学员,本文章是基于C-IDE的入口使用指南,您能够查看demo项目来了解C-IDE详细操作哦~ 如有疑问您可提交反馈来咨询,或扫描下方二维码增加官方微信群.我们会认真对待且具体回 ...

  2. Emacs在RHEL 5上的安装和使用

    1. install latest emacs xz -d emacs-24.3.tar.xz tar xvf emacs-24.3.tar ./configure make make install ...

  3. 如何打印加密的PDF文件?

    如何打印加密的PDF文件? Pdf加密了不让打印怎么办?? 下载Foxit PDF Editor以下是下载地址:http://www.orsoon.com/Soft/4865.html 用它打开加密的 ...

  4. 站点CSS样式不起作用,或仅仅有一部分起作用?随手记

    事件:网页中使用了相同的样式,下半部分正常显示,上半部分样式所有丢失不能显示. 解决:改动了相应的CSS样式文件的编码 这个是最没有想到的解决的方法. 怎样调试:通过右键页面查看编码为UTF-8 或 ...

  5. Docker实战(五)编写Dockerfile

    一.创建Dockerfile文件 首先,需要创建一个目录来存放 Dockerfile 文件,目录名称可以任意,在目录里创建Dockerfile文件: 二.Dockerfile 基本框架 Dockerf ...

  6. Android 设计的几处硬伤

    [核心提示] 一些 Android App 不仅仅是设计风格的问题,产品交互上也比较混乱,造成用户体验不一致,这一部分原因也是 Android 当初设计时遗留的问题. 前几天看到 NovaDNG 介绍 ...

  7. IntelliJ IDEA导航特性Top20

    在前面的文章里,我介绍了IntelliJ IDEA(以下称IntelliJ)中与代码补全及重构相关的特性.今天我将介绍另外一个利器——IntelliJ的导航(Navigation),只要运用得当,它将 ...

  8. Android 利用fastjson进行json解析

    package com.example.FastJson.util; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.Typ ...

  9. bash的输出多行和vim的全部选择

    使用cat命令加输出符>来在bash脚本里面输出多行文本是最直观的做法. cat >out.file <<EOF start a line ... ... a line aga ...

  10. AESDK关于AEFX_CLR_STRUCT的用处

    主要是在初始化UI值的时候遇到问题,一直报错 但确实没有用到ui_width,ui_height...,仔细检查例子工程发现,少了一个AEFX_CLR_STRUCT宏 AEFX_CLR_STRUCT其 ...