java调用kettle向job(任务)和transformation(转换)传递参数实例

最近要对一个系统的数据同步到另一个系统中,要求新系统的数据结果完成之后,实时同步到另一个系统数据表中。

也就是动态的传一个关联的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传递的参数一致,可以写值进行测试。

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

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

时间: 2024-07-28 12:25:44

java调用kettle向job(任务)和transformation(转换)传递参数实例的相关文章

shell调用python脚本,并且向python脚本传递参数

1.shell调用python脚本,并且向python脚本传递参数: shell中: python test.py $para1 $para2 python中: import sys def main($canshu1, $canshu2) ..... main(sys.argv[1], sys.argv[2]) 2.使用shell调用python中的函数: python脚本如下: test.py: import ConfigParser config = ConfigParser.Config

java调用kettle_实现(2)

(1).参照"java调用kettle_导入jar包(1)",应用etl工具下lib里的所有jar (2). 最近要对一个系统的数据同步到另一个系统中,要求新系统的数据结果完成之后,实时同步到另一个系统数据表中. 也就是动态的传一个关联的ID.由于旧系统是vb做的,无法提供webservice接口,并且同步的表涉及到十几张表,并且两个系统表结构完全不一样,所以想到了kettle. java集成kettle网上有现成的实例,很简单.如:http://bakcom.iteye.com/bl

java中调用kettle转换文件

java中调用kettle转换文件 通过命令行也可以调用,然后java中调用命令行代码也可以:这样没有和java代码逻辑无缝集成.本文说明kettle5.1中如果通过其他API和java代码无缝集成:网上大多数资料都是低版本的,在kettle5.x中已经不能运行. 1.       需要哪些jar文件 以kettle开头的是必须,上图最下面三个也要:红色框中的两个是我测试转换用到的,分别是生成UUID和文件. 要是少了jar文件,运行程序一定报错,大家根据错误到kettle安装目录LIB中找相应

java中调用kettle作业以及生成web service 接口

第一步:(前提将kett中lib下的所有jar包拷贝到java项目lib目录)创建并连接资源库,如果只用这一个工作空间,可以将此段代码放入静态代码块,代码如下: KettleEnvironment.init(); //创建资源库对象,此时的对象还是一个空对象 KettleDatabaseRepository repository = new KettleDatabaseRepository(); //创建资源库数据库对象,类似我们在spoon里面创建资源库 //(数据库连接名称,数据库类型,连接

Java调用WebService 接口 实例

这里给大家介绍一下,Java调用webservice的一个实例的过程. 本项目不能运行,因为接口地址不可用. 这里只是给大家介绍一个过程,同时留作自己的笔记.如果要学习,可以参照别人的实例.比较好. ①选择项目根目录的src ,右键,new --> webservice client 然后输入地址: http://172.18.100.52:456/hello?wsdl 必须要加wsdl结尾,这样才是一个webservice的接口. finlish.这时候刷新项目.可以看到项目下/src/com

java 调用 keytool 生成keystore 和 cer 证书

keytool是一个Java数据证书的管理工具, keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里, 包含两种数据: 密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密) 可信任的证书实体(trusted certificate entries)——只包含公钥 ailas(别名)每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写 下面给出一

java调用phantomjs采集ajax加载生成的网页

java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应的内容,可是我的浏览器看到的内容明明是有的,于是浏览器查看源代码也发觉没有,此时想起该网页应该是ajax加载的.不知道ajax的小朋友可以去学下web开发啦. 采集ajax生成的内容手段不外乎两种.一种是通过http观察加载页面时候的请求,然后我们模仿该请求去得到对应的内容,第二种则是模仿浏览器行为

Java调用Linux命令(cd的处理)

一.Java调用Linux系统的命令非常简单 这是一个非常常用的调用方法示例: 1 public String executeLinuxCmd(String cmd) { 2 System.out.println("got cmd job : " + cmd); 3 Runtime run = Runtime.getRuntime(); 4 try { 5 Process process = run.exec(cmd); 6 InputStream in = process.getIn

JAVA调用Shell脚本

在实际项目中,Java有时候需要调用C写出来的东西,除了JNI以外,我认为一种比较好的方法是JAVA调用Shell.先把C写出来的make成可执行文件,然后再写一个shell脚本执行该可执行文件,最后是JAVA调用该shell脚本. JAVA调用很简单,例子如下: 首先是shell脚本 [plain] view plain copy print? #!/bin/sh echo Begin word cluster /home/felven/word2vec/word2vec -train /ho