版权声明:本文为博主原创文章,未经博主允许不得转载。

Java调用Kettle执行任务或转换,需要使用Kettle中的jar,可以先导入lib目录中的几个基本的jar,如:kettle-core.jar、kettle-db.jar、kettle-engine.jar ,其它jar根据情况进行添加,所需的jar在<kettle-home>\lib、<kettle-home>\libext下面都可以找到,本示例引用的jar如下图:

之后编写代码测试Java调用,调用前先使用Kettle的设计器设计了一个转换,取名为voucher.ktr。另外,本示例使用的是Kettle3.2的版本,据说4.1版本调用方法会有不同。

  1. import org.pentaho.di.core.database.DatabaseMeta;
  2. import org.pentaho.di.core.exception.KettleException;
  3. import org.pentaho.di.core.logging.LogWriter;
  4. import org.pentaho.di.core.util.EnvUtil;
  5. import org.pentaho.di.job.Job;
  6. import org.pentaho.di.job.JobEntryLoader;
  7. import org.pentaho.di.job.JobMeta;
  8. import org.pentaho.di.repository.Repository;
  9. import org.pentaho.di.repository.RepositoryDirectory;
  10. import org.pentaho.di.repository.RepositoryMeta;
  11. import org.pentaho.di.repository.UserInfo;
  12. import org.pentaho.di.trans.StepLoader;
  13. import org.pentaho.di.trans.Trans;
  14. import org.pentaho.di.trans.TransMeta;
  15. /**
  16. * Java调用Kettle示例代码
  17. *
  18. * @author 李文锴
  19. * @since 2012-8-14 下午03:50:00
  20. *
  21. */
  22. public class KettleTest {
  23. public static void main(String[] args) throws KettleException {
  24. String filename = "voucher.ktr";
  25. // callNativeTrans(filename);
  26. // executeTrans();
  27. // executeJobs();
  28. callNativeTransWithParam(filename);
  29. System.out.println("ok");
  30. }
  31. /**
  32. * 调用本地的转换文件
  33. *
  34. * @Description:
  35. * @param transFileName
  36. * @throws KettleException
  37. * @author 李文锴
  38. * @since:2012-8-15 下午02:58:41
  39. */
  40. public static void callNativeTrans(String transFileName) throws KettleException {
  41. // 初始化
  42. EnvUtil.environmentInit();
  43. StepLoader.init();
  44. // 转换元对象
  45. TransMeta transMeta = new TransMeta(transFileName);
  46. // 转换
  47. Trans trans = new Trans(transMeta);
  48. // 执行转换
  49. trans.execute(null);
  50. // 等待转换执行结束
  51. trans.waitUntilFinished();
  52. }
  53. /**
  54. * 调用本地的转换文件(带参数)
  55. *
  56. * @Description:
  57. * @param transFileName
  58. * @throws KettleException
  59. * @author 李文锴
  60. * @since:2012-8-15 下午02:58:54
  61. */
  62. public static void callNativeTransWithParam(String transFileName) throws KettleException {
  63. // 初始化
  64. EnvUtil.environmentInit();
  65. StepLoader.init();
  66. // 转换元对象
  67. TransMeta transMeta = new TransMeta(transFileName);
  68. // 转换
  69. Trans trans = new Trans(transMeta);
  70. String[] params = {};
  71. // 执行转换
  72. trans.execute(params);
  73. // 等待转换执行结束
  74. trans.waitUntilFinished();
  75. }
  76. /**
  77. * 执行存储在数据库资源库中的转换
  78. *
  79. * @Description:
  80. * @throws KettleException
  81. * @author 李文锴
  82. * @since:2012-8-15 下午02:59:14
  83. */
  84. public static void executeTrans() throws KettleException {
  85. // 初始化
  86. EnvUtil.environmentInit();
  87. StepLoader.init();
  88. // 日志
  89. LogWriter log = LogWriter.getInstance("TransTest.log", true, LogWriter.LOG_LEVEL_DEBUG);
  90. // 用户
  91. UserInfo userInfo = new UserInfo();
  92. userInfo.setLogin("admin");
  93. userInfo.setPassword("admin");
  94. // 数据库连接元对象(连接名称,不必与kettle中配置的保持一致:数据库类型:连接方式(kettle支持的连接方式):资源库IP:资源库实例名:资源库端口:资源库用户名:资源库用户密码)
  95. DatabaseMeta connection = new DatabaseMeta("", "Oracle", "Native", "192.168.3.232", "NSDEV", "1521", "nstcsa3441", "671468");
  96. // 资源库元对象
  97. RepositoryMeta repinfo = new RepositoryMeta();
  98. repinfo.setConnection(connection);
  99. // 资源库
  100. Repository rep = new Repository(log, repinfo, userInfo);
  101. // 连接资源库
  102. rep.connect("");
  103. // 资源库目录对象
  104. RepositoryDirectory dir = new RepositoryDirectory(rep);
  105. // 转换元对象
  106. TransMeta transMeta = new TransMeta(rep, "凭证(N9->EVC2)", dir);
  107. // 转换
  108. Trans trans = new Trans(transMeta);
  109. // 执行转换
  110. trans.execute(null);
  111. // 等待转换执行结束
  112. trans.waitUntilFinished();
  113. }
  114. /**
  115. * 执行本地的任务文件
  116. *
  117. * @Description:
  118. * @param jobFileName
  119. * @throws KettleException
  120. * @author 李文锴
  121. * @since:2012-8-15 下午02:59:34
  122. */
  123. public static void callNativeJob(String jobFileName) throws KettleException {
  124. // 初始化
  125. EnvUtil.environmentInit();
  126. JobEntryLoader.init();
  127. StepLoader.init();
  128. // 日志
  129. LogWriter log = LogWriter.getInstance("TransTest.log", true, LogWriter.LOG_LEVEL_DETAILED);
  130. // job元对象
  131. JobMeta jobMeta = new JobMeta(log, jobFileName, null);
  132. // job
  133. Job job = new Job(log, StepLoader.getInstance(), null, jobMeta);
  134. jobMeta.setInternalKettleVariables(job);
  135. // 执行job
  136. job.execute();
  137. // 等待job执行结束
  138. job.waitUntilFinished();
  139. }
  140. /**
  141. * 执行数据库资源库中的任务
  142. *
  143. * @Description:
  144. * @throws KettleException
  145. * @author 李文锴
  146. * @since:2012-8-15 下午02:59:45
  147. */
  148. public static void executeJobs() throws KettleException {
  149. // 初始化
  150. EnvUtil.environmentInit();
  151. JobEntryLoader.init();
  152. StepLoader.init();
  153. // 日志
  154. LogWriter log = LogWriter.getInstance("TransTest.log", true, LogWriter.LOG_LEVEL_DETAILED);
  155. // 用户
  156. UserInfo userInfo = new UserInfo();
  157. userInfo.setLogin("admin");
  158. userInfo.setPassword("admin");
  159. // 数据库连接元对象
  160. DatabaseMeta connection = new DatabaseMeta("", "Oracle", "Native", "192.168.3.232", "NSDEV", "1521", "nstcsa3441", "671468");
  161. // 资源库元对象
  162. RepositoryMeta repinfo = new RepositoryMeta();
  163. repinfo.setConnection(connection);
  164. // 资源库
  165. Repository rep = new Repository(log, repinfo, userInfo);
  166. // 连接资源库
  167. rep.connect("");
  168. // 资源库目录对象
  169. RepositoryDirectory dir = new RepositoryDirectory(rep);
  170. // 步骤加载对象
  171. StepLoader steploader = StepLoader.getInstance();
  172. // job元对象
  173. JobMeta jobmeta = new JobMeta(log, rep, "4.账户每日余额", dir);
  174. // job
  175. Job job = new Job(log, steploader, rep, jobmeta);
  176. // 执行job
  177. job.execute();
  178. // 等待job执行结束
  179. job.waitUntilFinished();
  180. }
  181. }

本示例只能实现一次调用,暂时不知道如何通过API设定运行时间,但可以结合spring和Quartz,设定定时调度,以便实现调度目标。

来源:http://blog.csdn.net/scorpio3k/article/details/7869196

java调用kettle_导入jar包(1)的更多相关文章

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

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

  2. 在java工程中导入jar包的注意事项

    在java工程中导入jar包后一定要bulid path,不然jar包不可以用.而在java web工程中导入jar包后可以不builld path,但最好builld path.

  3. java项目(java project)如何导入jar包的解决方案列表

    右键项目-properties-java build path(左侧菜单)-选择libraries 有两种方式,导入jar包实际上就是建立一种链接,并不是copy式的导入 一.导入外部包,add ex ...

  4. eclipse项目(java project)如何导入jar包的解决方案列表?

    右键项目-properties-java build path(左侧菜单)-选择libraries 有两种方式,导入jar包实际上就是建立一种链接,并不是copy式的导入 一.导入外部包,add ex ...

  5. Idea JAVA項目的导入JAR包和导出jar包

    一.IDea项目中导入jar包 打开菜单project structure,然后选择modules/dependencies下选择右侧的+,选择jar包目录中的jar文件,导入 二.导出jar包 菜单 ...

  6. java maven项目 导入jar包注意

    1.将jar 包放到lib目录下 2.build path 3.点击maven主项目右键选择properties 4.选择myeclipse 下的第一个选项 5.点击add   选择archives ...

  7. java web工程导入jar包流程,容易犯错

    1)首先把jar包拷贝到WEB-INF/lib下 2)在Eclipse中web/WEB-INF/lib路径下刷新.(省略此步骤就会找不到) 3)Java Build Path中Remove掉Web A ...

  8. java调用kettle_实现(2)

    (1).参照“java调用kettle_导入jar包(1)”,应用etl工具下lib里的所有jar (2). 最近要对一个系统的数据同步到另一个系统中,要求新系统的数据结果完成之后,实时同步到另一个系 ...

  9. Android使用KSOAP2调用WebService及正确导入jar包的问题(转)

    Android使用KSOAP2调用WebService及正确导入jar包的问题(转)     错误信息 最近在学Android使用KSOAP2调用现有的Webservice的方法,期间在网上找了很多代 ...

随机推荐

  1. 分享六个基于Bootstrap的实用开发教程和模板演示

    关于Bootstrap,相信大家一定不陌生,它已经成为现在主流产业的一个重要工具,Bootstrap提供了优雅的HTML和CSS规范,它基于jQuery框架开发的,它在jQuery框架的基础上进行了更 ...

  2. java对象的强引用,软引用,弱引用和虚引用

    1.强引用 以前我们使用的大部分引用实际上都是强引用,这是使用最普遍的引用.如果一个对象具有强引用,那就类似于必不可少的生活用品,垃圾回收器绝不会回收它.当内存空 间不足,Java虚拟机宁愿抛出Out ...

  3. 算法笔记_147:有向图欧拉回路判断应用(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 Description In order to make their sons brave, Jiajia and Wind take them t ...

  4. 算法笔记_023:拓扑排序(Java)

    目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进 ...

  5. 43、Java动态代理一——动态类Proxy的使用

    1.什么是动态代理? 答:动态代理可以提供对另一个对象的访问,同时隐藏实际对象的具体事实.代理一般会实现它所表示的实际对象的接口.代理可以访问实际对象,但是延迟实现实际对象的部分功能,实际对象实现系统 ...

  6. 基于olami开放语义平台的微信小程序遥知之源码实现

    概述 实现一个智能生活信息查询的小秘书功能,支持查天气.新闻.日历.汇率.笑话.故事.百科.诗词.邮编.区号.菜谱.股票.节目预告,还支持闲聊.算24点.数学计算.单位换算.购物.搜索等功能. 使用方 ...

  7. jquery api 常见api 效果操作例子

    addClass_removeClass_toggleClass_hasClass.html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 ...

  8. 复制Map对象:Map.putAll方法

    复制Map对象:Map.putAll方法 Map.putAll方法可以追加另一个Map对象到当前Map集合 package xmu.sxl; import java.util.HashMap; imp ...

  9. Spring boot 配置 swagger

    1.maven配置包 <!-- https://mvnrepository.com/artifact/io.springfox/springfox-swagger2 --> <dep ...

  10. Tsung运行环境安装(转)

    转自:http://www.cnblogs.com/tsbc/p/4272974.html#_Toc372013359 tsung Tsung运行环境安装 检查安装一下依赖包,以免在安装的时候报错.( ...