java调用kettle工作脚本报数据库连接错误
场景: kettle工具设计好了一个工作脚本,此工作脚本里面的连接数据库都是动态参数(如:${db_username}),java调用这个kettle的工作脚本时报数据库连接错误,但是将java传参的参数列表打印出来后,放到kettle工具里面去作为初始化参数去直接执行工作脚本却是成功的。
分析:
- 先设计了一个最简单的无参的工作脚本,java调用是成功的,可以知道应该是参数的问题。
- 然后,又设计了一个有参的工作脚本,但是没有直接在工作脚本那里初始化参数列表,java调用任然是成功的, 然后就觉得很奇怪了,为什么联调的那个脚本就不成功呢?
这时候很难想到会是工作脚本那里的初始化参数列表导致的问题。此时就到网上各种搜资料,但是搜了半天,无果(网上这方面的资料太少)。
最后,只能打印job的参数列表,有Variables与Parameters两种,虽然资料上都是直接setVariables,但是还是都打印出来看看。然后就比较正常跑起来来的脚本与那个错误脚本的打印区别。最后发现是jobMeta的listParameters 的不同,有初始化参数列表的脚本这里是有值的,无参数列表这里是没有值的,然后就要求徐康将初始化参数列表都删除掉,果然,java调用就成功了。
此时,才知道是这个有参数列表和无参数列表的问题
String[] arr1 = jobMeta.listVariables();
String[] arr2 = jobMeta.listParameters();
String[] arr3 = job.listVariables();
String[] arr4 = job.listParameters();
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++关键key");
System.out.println("---------------jobMeta的listVariables,按分号分隔");
for (String s1 : arr1) {
System.out.