java 调用kettle7_java调用kettle_实现(2)

这篇博客讲述了如何利用Java调用Kettle工具进行数据同步。在旧系统与新系统间,由于VB系统无法提供接口,作者通过Kettle实现了动态传递参数的Java程序,以实现实时同步数据。博客详细介绍了如何在Java中初始化Kettle环境,执行job和转换,并传递参数,以及在Kettle中接收和使用Java传递的参数。
摘要由CSDN通过智能技术生成

(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传递的参数了。

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

f1d2027b4acfcbfd5fcec423d0d1ffe4.png

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

L3Byb3h5L2h0dHAvYmxvZy5jc2RuLm5ldC9kaXJmdWwvYXJ0aWNsZS9kZXRhaWxzLzQyMDI2NTQ1I2NvbW1lbnRz.jpg

a2c78e502762d1b281abdf1b243a1a38.png

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

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

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

3f49f268a3c75ea7dc79829f8f076e2c.jpg

3f49f268a3c75ea7dc79829f8f076e2c.jpg

L3Byb3h5L2h0dHAvYmxvZy5jc2RuLm5ldC9kaXJmdWwvYXJ0aWNsZS9kZXRhaWxzLzQyMDI2NTQ1I2NvbW1lbnRz.jpg

d6282de1b26637799ecd82f7e5248356.png

L3Byb3h5L2h0dHAvYmxvZy5jc2RuLm5ldC9kaXJmdWwvYXJ0aWNsZS9kZXRhaWxzLzQyMDI2NTQ1I2NvbW1lbnRz.jpg

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

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

969d615c23d5f74be1a567b38243d5cd.png

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

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

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

38c04af1bcf31a7a6dcebe2adb1c35d0.png

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

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

来源://bbsmax.ikafan.com/static/L3Byb3h5L2h0dHAvYmxvZy5jc2RuLm5ldC9kaXJmdWwvYXJ0aWNsZS9kZXRhaWxzLzQyMDI2NTQ1I2NvbW1lbnRz.jpg

java调用kettle&lowbar;导入jar包(1)

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

JAVA调用 keytool 生成keystore 和 cer 证书

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

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

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

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

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

c&plus;&plus; c&num; java 调用 c&plus;&plus; 写的dll

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

Java调用第三方dll文件的使用方法 System&period;load&lpar;&rpar;或System&period;loadLibrary&lpar;&rpar;

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

【转】java调用webservice

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

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

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

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

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

随机推荐

python连接mysql的驱动

对于py2.7的朋友,直接可以用MySQLdb去连接,但是MySQLdb不支持python3.x.这是需要注意的~ 那应该用什么python连接mysql的驱动呢,在stackoverflow上有人解 ...

LCLFramework框架之IOC

我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑. 借助于"第三方"实现具有依赖关系的对象之间的解 ...

UWP开发入门(二十)——键盘弹起时变更界面布局

UWP APP在键盘弹起或隐藏时,并不会自动处理界面布局.有时会出现键盘遮挡了下一个需要填写的文本框,或是下一步按钮的情况.本篇我们以登录界面做例子,用一种巧妙简单的方式在键盘弹起和隐藏时更改界面的布 ...

如何采集所有QQ群成员?

首先,你需要有一个CHROME浏览器其实,你要装一个叫REGEX SCRAPER的插件 在qun.qzone.qq.com打开你的QQ群页面-查看群成员 点击REGEX 插件, 粘贴上这个代码 tex ...

Python获取两个ip之间的所有ip

int_ip = lambda x: '.'.join([str(x/(256**i)%256) for i in range(3,-1,-1)]) ip_int = lambda x:sum([25 ...

如何用C程序简单演奏乐曲

如何用C程序简单演奏乐曲 首先我们要介绍一个函数: Beep(Frequency,time) 如果我们在程序中运行这个函数 Int main(void) { Beep(Frequency,time); ...

HDU 1847 Good Luck in CET-4 Everybody&excl;

题解:巴什博弈,2^k+1=3N或2^k2=3N,所以3N为P-position,3N+r为N-position. #include int main(){ int n; ...

源代码安装软件-MySQL

一.源码安装 1.经典的源代码安装三步曲: 1.编译前的配置 ./configure 2.编译 make 3.安装 make install 2.源代码软件安装步骤: 1.下载软件包 2.校验软件包 ...

oracle 处理时间和金额大小写的相关函数集合

CREATE OR REPLACE FUNCTION MONEY_TO_CHINESE(MONEY IN VARCHAR2) RETURN VARCHAR2 IS C_MONEY ); M_STRIN ...

event 事件1

1.事件流 1.1 事件冒泡 IE8- 浏览器支持的事件流是事件冒泡.事件冒泡是事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点(文档)的过程. g ...

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值