Java项目中调用Kettle转换
来源:互联网 发布:淘宝店铺话费充值软件 编辑:程序博客网 时间:2024/06/05 06:22
Kettle版本:6.0.0.0.0.353
JDK:1.7_75
需要的Jar包(kettle-core-6.0.0.0-353.jar、kettle-engine-6.0.0.0-353.jar、metastore-6.0.0.0-353.jar)这三个是主要的
其他可能需要的包(apache-commons相关的、slf4j、javassist 等)。
把基本三个把加进去,启动之后根据具体提示补全剩下的包就好。所有的包,在Kettle的解压包里 \lib 都有
首先,第一步是要有一个转换文件。
如图,我的转换功能是,将一个Excel文件获取,做一些数据验证,然后返回给Java代码处理,中间会记录出错的总记录数。
该转换需要一个参数,输入Excel文件路径。
最后的空操作是为了在代码中用来监听该步骤来获取数据。
实现代码如下:
1、初始化Kettle。这个有个梗,对于Web项目,必须要更改一下用户目录,否则直接初始化第一次要加载很久才会有响应,更改完之后要改回来。
具体差异可以在命令行中输出一下 user.dir 来看看。更改之后生成的位置,WEB项目应该是在 WEB-INF目录下,会产生一个 .kettle 的文件夹,
里面包含一个kettle.properties 配置文件
logger.info("Kettle Init...");// if (!KettleEnvironment.isInitialized()) {// 获得执行类的当前路径String user_dir = System.getProperty("user.dir");// Kettle初始化需要修改相应的配置路径System.setProperty("KETTLE_HOME", kettleHome);System.setProperty("user.dir", kettleHome);// 运行环境初始化(设置主目录、注册必须的插件等)KettleEnvironment.init();// Kettle初始化完毕,还原执行类的当前路径System.setProperty("user.dir", user_dir);// }2、创建转换对象,并指定转换文件位置。 setParameterValue 给转换的变量设值,将Excel文件的位置传过去。
String path = KettleUtils.class.getResource("/").toURI().getPath();path += "ExcelTransform.ktr";TransMeta tm = new TransMeta(path);Trans trans = new Trans(tm);// trans.setLogLevel(LogLevel.ERROR);trans.setParameterValue("FILE_PATH", excelPath);trans.prepareExecution(null);logger.info("Kettle Recording...");3、记录每行的数据,并存在内存里 (数据量大的时候不建议直接这样做),然后启动。
这里的步骤是:getSteps 先获取转换里所有的步骤,如上图,通俗讲就是每一个图标节点。
然后steps.get 获取指定的步骤,上面说了我们监听最后一个步骤,那直接取 总步骤数的 size - 1 就好了。
然后给该步骤添加行监听器,在监听器的处理里获取数据并添加到List集合里,最后正式启动,并等待执行完成。
// 记录导入的每行数据final List<RowMetaAndData> rows = new ArrayList<RowMetaAndData>();RowListener rowListener = new RowAdapter() {@Overridepublic void rowWrittenEvent(RowMetaInterface rowMeta, Object[] row) throws KettleStepException {rows.add(new RowMetaAndData(rowMeta, row));}};List<StepMetaDataCombi> steps = trans.getSteps();String stepname = steps.get(steps.size() - 1).stepname;StepInterface stepInterface = trans.findRunThread(stepname);stepInterface.addRowListener(rowListener);// 启动并等待执行完成trans.startThreads();trans.waitUntilFinished();logger.info("Kettle Processing...");4、后续就是数据处理了,数据都已经到 List<RowMetaAndData> rows 里面了。通过字段名获取,第二个参数为值为空时的默认值。
for (int i = 0; i < rows.size(); i++) { RowMetaAndData rmad = rows.get(i); String rowNo = rmad.getString("rowNo", null); String errorCount = rmad.getString("errorCount", null); String errorTips = rmad.getString("errorTips", null);}5、最后
KettleEnvironment.shutdown();
总体流程如上。提供给需要的一个参考。
这里有需要获取Kettle工具的日志输出也可以。提供另一篇文章记录的以供参考
http://blog.csdn.net/leave00608/article/details/50177231
提供一个Kettle 4.4版本的API CHM文件下载。找不着更高版本的......不过一样能用,稍微有点变动
http://download.csdn.net/detail/leave00608/9509596
- Java项目中调用Kettle转换
- java中调用kettle转换文件
- java中调用kettle转换文件
- java中调用kettle转换文件
- kettle中调用java类
- Java调用Kettle执行任务或转换
- java 整合Web调用kettle本地转换
- BI:Java调用Kettle执行任务或转换
- Java-动态传参调用kettle转换和作业
- Kettle java调用
- java调用Kettle总结
- Kettle java调用
- kettle 中Modified Java Script Value插件调用java代码
- Java调用ETL工具Kettle
- java调用spoon kettle API
- java调用kettle工具类
- kettle+java代码调用Webservice
- kettle调用自定义java类
- poj2486 Apple Tree 树上分组背包
- 对象或库文件“*.lib”是使用比创建其他......的解决方法
- How to call stored procedure in Hibernate
- java ReentrantLock与synchronized
- ORACLE死锁
- Java项目中调用Kettle转换
- 浅谈域名发散与域名收敛
- MediaPlayer和SoundPool
- Jindent——让intellij idea 像eclipse一样生成模版化的javadoc注释
- [算法]负载均衡
- 快速理解RxJava源码的设计理念
- 400 (bad request) post
- 如何不用写一行代码就能学习软件开发
- Android 百个项目的源代码