楔子
java调用kettle,获取类似kettle界面执行结果面板步骤度量
代码
/**
* 执行 JOB
*
* @param repository
* kettle数据库资源库
* @param job_path
* JOB 目录
* @param job_name
* JOB 名称
* @param variableMap
* 变量Map
* @throws KettleException
*/
public static boolean execJob(KettleDatabaseRepository repository, String job_path, String job_name, Map<String, Object> variableMap) throws KettleException {
System.setProperty("KETTLE_DEFAULT_SERVLET_ENCODING", StandardCharsets.UTF_8.name());
RepositoryDirectoryInterface dir = repository.findDirectory(job_path);
JobMeta jobMeta = repository.loadJob(repository.getJobId(job_name, dir), null);
Job job = new Job(repository, jobMeta);
// 设置参数无用,基本都是使用的是变量 而非参数
job.setLogLevel(LogLevel.MINIMAL);
// 设置变量 java代码中变量会覆盖kettle里面设置的变量
if (variableMap != null) {
Set<Entry<String, Object>> entrySet = variableMap.entrySet();
for (Entry<String, Object> entry : entrySet) {
job.setVariable(entry.getKey(), entry.getValue().toString());
}
}
// 启动执行指定的job
job.start();
job.waitUntilFinished();// 等待job执行完
job.setFinished(true);
if (job.isFinished()) {
List<JobEntryResult> jobEntryResults = job.getJobEntryResults();
for (JobEntryResult jobEntryResult : jobEntryResults) {
System.out.println("执行步骤=" + jobEntryResult.getJobEntryName() + ",执行状态=" + jobEntryResult.getResult().getResult());
}
}
// 执行 打印的日志 等全在这个xml中
System.out.println("------------------------------------------------------------");
job.getResult().getBasicXml();
System.out.println(job.getResult().getLogText());
return job.getResult().getResult();
}
日志信息
job.getResult().getLogText()
里面可以获取如下日志信息
2018/11/04 03:04:11 - A_转换 - 为了转换解除补丁开始 [A_转换]
2018/11/04 03:04:11 - A_转换 - 已经找到的参数数量:0
2018/11/04 03:04:11 - A_转换 - 这没有一个重放的转换
2018/11/04 03:04:11 - A_转换 - 我找到 2 个不同的要执行的步骤.
2018/11/04 03:04:11 - A_转换 - 分派记录集...
2018/11/04 03:04:11 - A_转换 - 正在分配行组为步骤 0 --> A_元数据
2018/11/04 03:04:11 - A_转换 - 前一个副本 = 1, 下一个副本=1
2018/11/04 03:04:11 - A_转换 - 转换分配了新的行组 [A_元数据.0 - A_数据输出.0]
2018/11/04 03:04:11 - A_转换 - 已分配 1 行组为步骤 0 --> A_元数据
2018/11/04 03:04:11 - A_转换 - 正在分配行组为步骤 1 --> A_数据输出
2018/11/04 03:04:11 - A_转换 - 已分配 1 行组为步骤 1 --> A_数据输出
2018/11/04 03:04:11 - A_转换 - 正在分配步骤和步骤数据...
2018/11/04 03:04:11 - A_转换 - 转换大约分配了 步骤 [A_元数据] 类型的 [TableInput]
2018/11/04 03:04:11 - A_转换 - 步骤已经有了副本=1
2018/11/04 03:04:11 - A_元数据.0 - 分散被激活
2018/11/04 03:04:11 - A_元数据.0 - Starting allocation of buffers & new threads...
2018/11/04 03:04:11 - A_元数据.0 - 步骤信息: 输入数量=0 输出数量=1
2018/11/04 03:04:11 - A_元数据.0 - output rel. is 1:1
2018/11/04 03:04:11 - A_元数据.0 - 发现输出 rowset [A_元数据.0 - A_数据输出.0]
2018/11/04 03:04:11 - A_元数据.0 - 完成分发
2018/11/04 03:04:11 - A_转换 - 转换已经分配了一个新的步骤: [A_元数据].0
2018/11/04 03:04:11 - A_转换 - 转换大约分配了 步骤 [A_数据输出] 类型的 [TableOutput]
2018/11/04 03:04:11 - A_转换 - 步骤已经有了副本=1
2018/11/04 03:04:11 - A_数据输出.0 - 分散被激活
2018/11/04 03:04:11 - A_数据输出.0 - Starting allocation of buffers & new threads...
2018/11/04 03:04:11 - A_数据输出.0 - 步骤信息: 输入数量=1 输出数量=0
2018/11/04 03:04:11 - A_数据输出.0 - 获取来自前一步骤 [A_数据输出] #0 --> A_元数据
2018/11/04 03:04:11 - A_数据输出.0 - input rel is 1:1
2018/11/04 03:04:11 - A_数据输出.0 - 发现输入记录集合 [A_元数据.0 - A_数据输出.0]
2018/11/04 03:04:11 - A_数据输出.0 - 完成分发
2018/11/04 03:04:11 - A_转换 - 转换已经分配了一个新的步骤: [A_数据输出].0
2018/11/04 03:04:11 - A_转换 - 这项转换可以被回放 回放日期是: 2018/11/04 03:04:11
2018/11/04 03:04:11 - A_转换 - 正在初始化 2 步骤...