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了。

最新文章

  1. 利用Maven把项目生成jar包供其他项目使用
  2. highlight.js 页面 代码高亮
  3. C#实现动态页面静态化
  4. iOS 面试题及答案
  5. SharedPreferences实现自动登录记住用户名密码
  6. [原]Unity3D深入浅出 - 光源组件(Light)
  7. Verilog HDL中阻塞语句和非阻塞语句的区别
  8. 冷市攻略:Listo 教你 25 今天的社会 Swift 语言 - 02 Swift Tour
  9. mahout第一篇-----Mahout学习路线图
  10. 让你的JS代码更具可读性
  11. 解决oracle数据库删除sql语句出现^H字样
  12. 容器平台选型的十大模式:Docker、DC/OS、K8S 谁与当先?
  13. c++中好用的函数
  14. centos7下/etc/rc.local文件里配置的开机启动项不执行的解决办法
  15. Hbase记录-ZooKeeper介绍
  16. [UE4]控制台命令,生成机器人
  17. Codeforces Beta Round #69 (Div. 2 Only)
  18. CSS的使用
  19. vue学习之一vue初识
  20. keil软件相关问题汇总

热门文章

  1. SQL 2008存储图片和读取图片
  2. Weblogic的Admin server进程将CPU消耗尽问题解决
  3. springMVC3学习(六)--SimpleFormController
  4. Android学习笔记--服务(Service)
  5. C# 类属性封装、字段的详解
  6. Struts2中的ActionContext
  7. QTestlib Manual翻译
  8. Android SDK 更新时修改hosts文件仍然无法更新,可试试这个方法……
  9. PHP基础示例:用PHP+Mysql编写简易新闻管理系统
  10. jQuery常用选择器汇总