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 rows = new ArrayList();
RowListener rowListener = new RowAdapter() {
@Override
public void rowWrittenEvent(RowMetaInterface rowMeta, Object[] row) throws KettleStepException {
rows.add(new RowMetaAndData(rowMeta, row));
}
};
List 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、后续就是数据处理了,数据都已经到 Listfor (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