脚本宝典收集整理的这篇文章主要介绍了在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}") }
一些问题
- 由于这个转换在执行的时候,有些参数是要通过业务系统中获取到然后传入到这里来的,所以需要考虑这些参数怎么进行传递。
- 数据库的配置也是要通过配置文件中获取的,不能写死。
问题解决
针对第一个问题,kettle
可以设置命名参数,然后在执行的时候指定这些参数就可以。
针对第二个问题,在执行转换的时候设置数据库的相关配置就可以。
开始转换
@H_777_74@设置命名参数 获取到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:384754419,请注明来意。