在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();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值