kettle工具二次开发-代码启动JOB
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的更多相关文章
- Kettle api 二次开发之 日志的保存
使用kettle做数据抽取的时候可以使用图形化的工具配置日志保存参数,选择数据库连接,输入日志表名称, 点击sql 执行对应的sql创建日志表即可. 点击保存之后,日志配置会保存在trans或者job ...
- prometheus的agent 二次开发代码参考
import com.codahale.metrics.MetricRegistry;import io.prometheus.client.CollectorRegistry;import io.p ...
- Jmeter二次开发代码(3)
package org.apache.jmeter.functions; import java.io.FileInputStream;import java.io.FileNotFoundExcep ...
- Jmeter二次开发代码(2)
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreem ...
- Jmeter二次开发代码(1)
package org.apache.jmeter.functions; import java.util.Collection;import java.util.LinkedList;import ...
- SolidWorks二次开发的研究
三维机械设计软件SolidWorks是一套基于Windows的CAD/CAE/CAM/PDM桌面集成系统,是由美国SolidWorks公司在总结和继承大型机械CAD软件的基础上,在Windows环境下 ...
- Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)
Revit二次开发环境搭建(Revit 2019+Visual Studio 2017)准备内容 Revit 2019开发环境的搭建,需要安装的内容如下: Revit 2019(主要的开发环境) Vi ...
- 基于spring-boot的社区社交微信小程序,适合做脚手架、二次开发
基于spring-boot的社区社交微信小程序,适合做脚手架.二次开发 代码地址如下:http://www.demodashi.com/demo/13867.html 1 概述 笔者做的一个后端基于s ...
- Linux内核启动代码分析二之开发板相关驱动程序加载分析
Linux内核启动代码分析二之开发板相关驱动程序加载分析 1 从linux开始启动的函数start_kernel开始分析,该函数位于linux-2.6.22/init/main.c start_ke ...
随机推荐
- springmvc工作原理和环境搭建
SpringMVC工作原理 上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServle ...
- 给定N个整数集合是否存在两个其和刚好为指定常数的元素
又一次学习一遍<算法导论>,看到了这个问题: 描写叙述一个执行时间为O(nlgn)的算法,使之能在给定一个由n个整数构成的集合S和还有一个整数 X 时,推断出S中是否存在有两个其和刚好等于 ...
- vs2013中国集
在TOOLS的菜单条下的最后一项.进去后在输入框输入Language.按Enter.选择语言,然后确定就可以. 如图 假设没有点击下拉框底下的链接 就会调挑转到语言包下载界面 下载须要的语言就可以, ...
- Win7 公布网站 HTTP 错误 404.4 - Not Found
NET IIS7.5 创建网站时,假设发现下面错误,而且 默认网站訪问没有问题的话, 能够尝试,进入 处理程序映射 右键恢复为父级,有可能会有意想不到的 惊喜. 我的问题就是这样解决的. 出现这 ...
- BOOST 线程完全攻略 - 基础篇
http://blog.csdn.net/iamnieo/article/details/2908621 2008-09-10 12:48 9202人阅读 评论(3) 收藏 举报 thread多线程l ...
- 一个很经典的this面试题
!function(){ this.length = 10; var fn = function(){ console.log(this.length); //输出多少? }, arr = [fn, ...
- SQL Server 2008 geometry 数据类型
摘自SQL Server 2008帮助 平面空间数据类型 geometry 是作为 SQL Server 中的公共语言进行时 (CLR) 数据类型实现的.此类型表示欧几里得(平面)坐标系中的数据. 注 ...
- volley三种基本请求图片的方式与Lru的基本使用:正常的加载+含有Lru缓存的加载+Volley控件networkImageview的使用
首先做出全局的请求队列 package com.qg.lizhanqi.myvolleydemo; import android.app.Application; import com.android ...
- UIWindow & UIWindowLevel详解
一.UIWindow是一种特殊的UIView,通常在一个程序中只会有一个UIWindow,但可以手动创建多个UIWindow,同时加到程序里面.UIWindow在程序中主要起到三个作用: 1.作为容器 ...
- 0112.1——iOS开发之理解iOS中的MVC设计模式
模型-视图-控制器(Model-View-Controller,MVC)是Xerox PARC在20世纪80年代为编程语言Smalltalk-80发明的一种软件设计模式,至今已广泛应用于用户交互应用程 ...