kettle工具是一款优秀的数据同步、数据处理的BI工具,收到了很多人的青睐。kettle软件通过可视化的图标可以让我们很轻易的能完成数据同步、处理的开发工作。但是使用kettle可视化界面在跑JOB久之后,会报JAVA SWT的错误,故为了程序的稳定性,我们需要对其进行二次开发。

1.kettle可视化界面设计

由于业务不同,使用kettle工具做出的设计也不同,故在此只写一下如何设置连接参数为全局变量参数。

a)设置全局变量,如下图操作

编辑>设置环境变量

b)在弹出的环境变量框中,输入变量名称及变量值

c)创建一个新的连接,将连接参数设置为变量即可,如下图

注:若transform报“Streaming result set com.mysql.jdbc.RowDataDynamic@a42491 is still active.”错误,则将数据库连接里面的前面的对勾去了即可

2.kettle二次开发

由于kettle可视化界面不稳定,所以我们决定使用代码来启动JOB。

a)将使用kettle工具时生成的.kettle文件放在工程的WEB-INF下面,如下图

b)修改repositories.xml下面我们的kettle的xml文件存放的地址

c)在servlet中将当前工程执行路径传入同步类中,使其可以用该路径初始化kettle环境,代码如下:

	/**
* 设置Kettle的初始化配置信息路径
* @throws KettleException
*/
private void initKettleEnvironment() {
// 获得执行类的当前路径
String kettleHome = this.getServletContext().getRealPath(File.separator + "WEB-INF");
System.out.println("kettleHome--->"+kettleHome);
this.mKettelHome = kettleHome;
}
private void startKettleTask()throws Exception{
Timer kettleTask= new Timer();
kettleTask.schedule(new KettleTask(this.mKettelHome), 0, "2000");
}

d)kettleTask类中开启kettleJOB,代码如下:

public class KettleTask extends TimerTask {
private String mKettleHome; public KettleTask() {
super();
} public KettleTask(String kettleHome) throws KettleException {
super();
this.mKettleHome = kettleHome; } @Override
public synchronized void run() {
Repository repository = null;
Job job = null;
try { // Kettle初始化需要修改相应的配置路径
String user_dir = System.getProperty("user.dir");
System.setProperty("user.dir", mKettleHome);
System.setProperty("KETTLE_HOME", mKettleHome); //设置连接环境变量
System.setProperty("DATABASE_IP_ADDRESS", "127.0.0.1");
System.setProperty("DATABASE_DATABASE", "mysql");
System.setProperty("DATABASE_IP_PORT","3306");
System.setProperty("DATABASE_USERNAME", "root");
System.setProperty("DATABASE_PASSWORD", "root"); // 运行环境初始化(设置主目录、注册必须的插件等)
KettleEnvironment.init(); // Kettle初始化完毕,还原执行类的当前路径
System.setProperty("user.dir", user_dir); RepositoriesMeta repositoriesMeta = new RepositoriesMeta();
// 从文件读取登陆过的资源库信息
repositoriesMeta.readData();
// 选择登陆过的资源库
RepositoryMeta repositoryMeta = repositoriesMeta
.findRepository("kettleDemo");
// 获得资源库实例
repository = PluginRegistry.getInstance().loadClass(
RepositoryPluginType.class, repositoryMeta.getId(),
Repository.class);
repository.init(repositoryMeta);
// 连接资源库
repository.connect("demo", "demo");
System.out.println("Repository SyncData connect success.");
JobMeta jobMeta = null; jobMeta = new JobMeta(
WsUtility
.getPropertyString("RootDirectory",
"file:////D://kettleDemo//")
+ "kettleDataJob.kjb",
repository); // 执行指定转换
if (jobMeta != null) {
job = new Job(repository, jobMeta);
job.start();
job.waitUntilFinished();
if (job.getErrors() > 0) {
System.out.println("decompress fail!");
}
}
repository.disconnect();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
}
}

至此我们就完成了代码启动kettle的JOB了。

kettle工具二次开发-代码启动JOB的更多相关文章

  1. Kettle api 二次开发之 日志的保存

    使用kettle做数据抽取的时候可以使用图形化的工具配置日志保存参数,选择数据库连接,输入日志表名称, 点击sql 执行对应的sql创建日志表即可. 点击保存之后,日志配置会保存在trans或者job ...

  2. prometheus的agent 二次开发代码参考

    import com.codahale.metrics.MetricRegistry;import io.prometheus.client.CollectorRegistry;import io.p ...

  3. Jmeter二次开发代码(3)

    package org.apache.jmeter.functions; import java.io.FileInputStream;import java.io.FileNotFoundExcep ...

  4. Jmeter二次开发代码(2)

    /* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...

  5. Jmeter二次开发代码(1)

    package org.apache.jmeter.functions; import java.util.Collection;import java.util.LinkedList;import ...

  6. SolidWorks二次开发的研究

    三维机械设计软件SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM桌面集成系统,是由美国SolidWorks公司在总结和继承大型机械CAD软件的基础上,在Windows环境下 ...

  7. Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)

    Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...

  8. 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发

    基于spring-boot的社区社交微信小程序,适合做脚手架.二次开发 代码地址如下:http://www.demodashi.com/demo/13867.html 1 概述 笔者做的一个后端基于s ...

  9. Linux内核启动代码分析二之开发板相关驱动程序加载分析

    Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c  start_ke ...

随机推荐

  1. 在iOS上present一个半透明的viewController

    UIViewController *viewController = [[UIViewController alloc]init]; UIViewController* controller = se ...

  2. python学习之路-5 基础进阶篇

    本篇涉及内容 双层装饰器字符串格式化 双层装饰器 装饰器基础请点我 有时候一个功能需要有2次认证的时候就需要用到双层装饰器了,下面我们来通过一个案例详细介绍一下双层装饰器: 执行顺序:自上而下 解释顺 ...

  3. PHP操作MySQL数据库的相关函数

    首先,要分清SQL语句的类型: SQL语句的分类 (1)DDL:Data Define Language,数据定义语言--定义表的列结构 CREATE.DROP.ALTER.TRUNCATE (2)D ...

  4. UVA247- Calling Circles(有向图的强连通分量)

    题目链接 题意: 给定一张有向图.找出全部强连通分量,并输出. 思路:有向图的强连通分量用Tarjan算法,然后用map映射,便于输出,注意输出格式. 代码: #include <iostrea ...

  5. Git的一些用法(建立新的branch)

    建立新的branch和查看全部的branch(kk的代码是基于现有的branch) 切换到branch kk: 当然我们也能够在android studio里操作: 注意切换的时候代码会丢失,必须先c ...

  6. Duanxx的STM32学习:STM32命名规则

  7. Oracle varchar 字段排序问题

    数据库字段: 想要的结果: 实际查询的结果: 解决方法:使用CAST函数把varchar2转为int类型 order by CAST(CODE AS INTEGER)

  8. JAVA反射机制示例,读取excel数据映射到JAVA对象中

    import java.beans.PropertyDescriptor; import java.io.File; import java.io.FileInputStream; import ja ...

  9. EffectiveC#17--装箱和拆箱的最小化

    1.如下这段代码会经历装箱和拆箱.例如25会先装箱成object后传递给writeline方法(一次拷贝),在方法内部又 经历拆箱成int(第二次拷贝)后然后调用tostring(). Console ...

  10. Linux中oracle安装时候报ora-00119解决办法

    ORA-00119: invalid specification for system parameter LOCAL_LISTENER ORA-00130: invalid listener add ...