脚本宝典收集整理的这篇文章主要介绍了

在java中执行kettle文件

脚本宝典小编觉得挺不错的,现在分享给大家,也给大家做个参考,希望能帮助你少写一行代码,多一份安全和惬意。

由于近期项目中需要对接收到文件进行解析,然后存入到数据库中,由于数据量较大,加之最近接触到了kettle,所以就想在项目中来实际使用下。

先编辑好kettle文件

这里进行转换的功能比较简单,就是从文件中获取数据,然后进行分割,然后存放到数据库中。如下图所示,是最终的kettle文件。

Java中调用Kettle来执行这个转换

添加依赖

这里使用的gradle,需要注意的是maven仓库的地址,在阿里的仓库貌似没找到kettle的包,配置如下:

ext {     kettleVersion = '8.0.0.0-1' }  repositories {     mavenLocal()     maven{ url 'http://maven.aliyun.com/nexus/content/groups/public/' }     maven{ url 'http://nexus.pentaho.org/content/groups/omni' } }  dependencies {     compile("pentaho-kettle:kettle-core:${kettleVersion}")     compile("pentaho-kettle:kettle-engine:${kettleVersion}") } 

一些问题

  1. 由于这个转换在执行的时候,有些参数是要通过业务系统中获取到然后传入到这里来的,所以需要考虑这些参数怎么进行传递。
  2. 数据库的配置也是要通过配置文件中获取的,不能写死。

问题解决

针对第一个问题,kettle可以设置命名参数,然后在执行的时候指定这些参数就可以。

针对第二个问题,在执行转换的时候设置数据库的相关配置就可以。

开始转换

设置命名参数

获取到metaData后,然后进行设置就可以,具体代码如下:

TransMeta transMeta = new TransMeta(filename);  Map<String, String> params = new HashMap<String, String>() {{   put("filePath", filename);   put("tableName", tableName);   put("version", String.valueOf(version.getVersion())); }};  params.forEach((k, v) -> {   try {     transMeta.setParameterValue(k, v);   } catch (UnknownParamException e) {     e.printStackTrace();   } });

设置数据库配置

在设置数据库的配置的时候需要注意密码的加密方式,具体代码如下:

private static final String SEED = "0933910847463829827159347601486730416058"; private static final String PASSWORD_ENCRYPTED_PREFIX = "Encrypted ";  private String getPassword(String dbPass) {   BigInteger bi_passwd = new BigInteger(dbPass.getBytes());    BigInteger bi_r0  = new BigInteger(SEED);   BigInteger bi_r1  = bi_r0.xor(bi_passwd);    return PASSWORD_ENCRYPTED_PREFIX + bi_r1.toString(RADIX); }

开始转换代码

KettleEnvironment.init();    // 初始化kettle环境  String filename = ResourceUtils.getFile("classpath:etc.ktr").getAbsolutePath();  TransMeta transMeta = new TransMeta(filename); List<DatabaseMeta> dbList = transMeta.getDatabases();  // TODO 修改数据库信息  // TODO 设置参数  Trans trans = new Trans(transMeta);  // 设置日志等级 trans.setLogLevel(LogLevel.ERROR); trans.execute(null);  trans.waitUntilFinished();

总结

以上是脚本宝典为你收集整理的

在java中执行kettle文件

全部内容,希望文章能够帮你解决

在java中执行kettle文件

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过