如何通过Spring Cloud Data Flow Java客户端获取Job的Execution Id
如何通过Spring Cloud Data Flow Java客户端获取Job的Execution Id
我明白你的困惑了——你在SCDF仪表盘「Tasks/Jobs」→「Job Executions」里看到的那个Execution Id(就是点击详情后URL里的数字,比如2902),其实是SCDF平台层面的「Task Execution ID」,而不是底层Spring Batch框架本身的Job Execution ID。你之前调用getJobExecution().getId()拿到的是Batch层面的执行ID,所以和仪表盘里的不是同一个东西。
给你两种直接获取目标ID的方案:
方案一:从已有的JobExecutionResource直接提取
你已经在使用jobOperations().jobExecution()方法查询Job执行信息,其实返回的JobExecutionResource对象里就自带了关联的Task Execution ID,调用它的getTaskExecutionId()方法就能拿到你要的那个仪表盘里的ID:
// 原有的查询逻辑 JobExecutionResource jobExecutionResource = dataFlowOperations.jobOperations().jobExecution(jobId, null); // 获取SCDF仪表盘里显示的Execution Id Long scdfExecutionId = jobExecutionResource.getTaskExecutionId();
这个scdfExecutionId就是你在URL和仪表盘第一列看到的那个数字,完全匹配你的需求。
方案二:通过TaskOperations灵活查询
如果需要根据任务名称、执行状态等条件筛选目标执行记录,可以直接用taskOperations()来查询Task Execution列表,从中提取ID:
// 获取所有Task执行记录 List<TaskExecutionResource> allTaskExecutions = dataFlowOperations.taskOperations().listTaskExecutions(); // 遍历筛选出你需要的Job对应的执行记录 for (TaskExecutionResource taskExec : allTaskExecutions) { // 这里可以根据任务名称、退出码、执行时间等条件过滤 if ("你的Job任务名称".equals(taskExec.getTaskName())) { Long targetExecutionId = taskExec.getId(); System.out.println("找到目标Execution Id:" + targetExecutionId); } }
补充说明
之所以会有两个不同的ID,是因为在SCDF中,每个Job的运行都会被包装成一个Task执行实例:
- 仪表盘展示的是SCDF的Task Execution元数据,对应的就是你要的那个ID;
jobOperations操作的是底层Spring Batch的Job Execution信息,它和Task Execution通过taskExecutionId字段关联。
备注:内容来源于stack exchange,提问作者The_Unknown
相关产品推荐
相关产品推荐

