java中调用kettle转换文件

java中调用kettle转换文件

通过命令行也可以调用,然后java中调用命令行代码也可以;这样没有和java代码逻辑无缝集成。本文说明kettle5.1中如果通过其他API和java代码无缝集成;网上大多数资料都是低版本的,在kettle5.x中已经不能运行。

1、       需要哪些jar文件

以kettle开头的是必须,上图最下面三个也要;红色框中的两个是我测试转换用到的,分别是生成UUID和文件。

要是少了jar文件,运行程序一定报错,大家根据错误到kettle安装目录LIB中找相应的jar加到编译路径中。

2、       示例说明如何通过java调用转换

示例是把一个excel的内容导入到数据中,excel只有两列,所以需要在kettle中生成一列uuid,然后导入到数据库中。

默认生成的uuid有‘-’间隔符,所以通过“Replace in string”替换为空;

excel步骤,使用了命名参数,所以要在转换配置设置命名参数。

示例代码如下:

publicclass KettleUtil2 {

   public String RES_DIR = "res";

   private String fullFileName ;

   public KettleUtil2(String fileName){

      fullFileName = System.getProperty("user.dir") + File.separator + RES_DIR;

      fullFileName += File.separator + fileName;

   }

   /**

    * 没有参数是,设置参数为null

    * @param paras

    */

   publicvoid runTransformation(Map<String,String> paras) {

      try {

        KettleEnvironment.init();

        TransMeta transMeta = new TransMeta(fullFileName);

        Trans  transformation =new Trans(transMeta);

        for(Map.Entry<String, String> entry: paras.entrySet()) {

            transformation.setParameterValue(entry.getKey(), entry.getValue());

        }

        transformation.execute(null);

        transformation.waitUntilFinished();

        if (transformation.getErrors() > 0) {

           thrownew RuntimeException(

                 "There wereerrors during transformation execution.");

        }

      } catch (KettleException e) {

        System.out.println(e);

      }

   }

}

最后调用代码如下:

publicclass EtlTest {

   publicstaticvoid main(String[] args) {

      KettleUtil2 etl = new KettleUtil2("testimport.ktr");

      Map<String,String> para = new HashMap<String,String>();

      //给转换中命名参数赋值

      para.put("XlsName", "data");

      etl.runTransformation(para);

   }

}
时间: 2024-12-21 23:35:08

java中调用kettle转换文件的相关文章

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

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

java中调用dll文件的两种方法

一中是用JNA方法,另外是用JNative方法,两种都是转载来的, JNA地址:http://blog.csdn.net/shendl/article/details/3589676   JNative地址:http://www.jb51.net/article/35232.htm JNA方法: 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA. JNA(Java Native Access)框架是一个开源的Java框架,是SUN公司主导开发的,建立在经典的JNI的基础之上的一个框架

python爬虫简单实现,并在java中调用python脚本,将数据保存在json文件中

# coding:utf-8 import urllib2 from bs4 import BeautifulSoup import json import sys reload(sys) sys.setdefaultencoding('utf-8') class dataBean(object) : def __init__(self, title, url,date): self.date = date self.url = url self.title = title def obj_2_

Java中调用MatLab返回值

当在Java中使用MatLab函数时,由于语言语法的不同,Matlab返回多个数据时,想在Java中获取到并进行使用.查阅了网上资料,翻箱倒柜加上自己实战,得出方法如下: 如MatLab函数返回的是N个变量值,其中有单个的数值.一维数组.二维数组等. 在Java中,使用Object[] rs=cmatlab.matlabfun(n , ....);接受返回的参数.其中rs[k]代表返回列表中第k个返回的变量的值. 如果rs[k]是单个数值,比如Double型.则使用下面的方法转换为Java中的D

Java中调用c/c++语言出现Exception in thread &quot;main&quot; java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V...错误

错误: Exception in thread "main" java.lang.UnsatisfiedLinkError: Test.testPrint(Ljava/lang/String;)V at Test.testPrint(Native Method) at Test.main(Test.java:8) 解决方法: 昨天一天都在想办法解决这个问题,操作步骤按照教程来的,怎么会出错呢?想了半天,觉得还是dll文件生成的不对.所以,最后决定把codeblocks换成visual

如何在Java中调用Python代码

有时候,我们会碰到这样的问题:与A同学合作写代码,A同学只会写Python,而不会Java, 而你只会写Java并不擅长Python,并且发现难以用Java来重写对方的代码,这时,就不得不想方设法“调用对方的代码”. 下面我将举一些简单的小例子,借此说明:如何在Java中调用Python代码. 看懂这篇文章只需要具备: 熟悉Java的基本语法 懂一点点Python 主要内容如下: 什么是Jython? 一个HelloPython程序 在Jvm中执行Python脚本 仅在Java中调用Python

在java中调用Oracle存储过程

在java中调用Oracle存储过程 本文介绍如何通过java来调用Oracle的存储过程 1. 编写存储过程 CREATE OR REPLACE PROCEDURE sp_pro3(sp_name VARCHAR2,sp_sal NUMBER ) IS BEGIN --根据用户名修改工资 UPDATE emp SET sal=sp_sal WHERE ename=sp_name; END; 引入jdbc6.jar,编写测试类Test.java package testOraclePro; im

在java中调用python方法

1.http://sourceforge.net/projects/jython/下载jython包,把其中的jython.jar添加到工程目录 示例: 1.摘自:http://blog.csdn.net/anbo724/article/details/6608632 1.在java类中直接执行python语句 import javax.script.*; import org.python.util.PythonInterpreter; import java.io.*; import sta

oracle pl/sql之在java中调用带有输入输出参数的oracle存储过程

只需注意一点输出参数是用CallableStatement里面的registerOutParameter方法注册进去 存储过程: import java.sql.CallableStatement;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;import java.sql.Types; //在java中