【发布时间】:2017-07-30 10:46:36
【问题描述】:
当我尝试在 UI 的“作业”选项卡(“获取数据时出错。数据流服务器是否正在运行?”)或通过 REST API (500 NullPointerException) 获取作业执行列表时,我发现了一个问题.
日志中的错误是
java.lang.NullPointerException: null
at org.springframework.cloud.dataflow.server.service.impl.DefaultTaskJobService.getTaskJobExecution(DefaultTaskJobService.java:231) ~[spring-cloud-dataflow-server-core-1.1.2.RELEASE.jar!/:1.1.2.RELEASE]
这似乎是由代码引起的:
taskExplorer.getTaskExecutionIdByJobExecutionId(jobExecution.getId())
调查一下,我的一些作业似乎与任务 ID 没有关联 - 即 task_task_batch 表中没有条目,如果我尝试检索其中一个作业或所有作业的列表,我会得到 NullPointerException。
直接通过在 task_task_batch 表中有关联的 id 检索作业是可以的。
调查为什么我的一些工作任务会发生这种情况,这似乎是因为其中一些使用 XML 而不是 Java Config 来配置工作 (我们有一些预先存在的复杂工作,我们正在从 XD 转移到 Spring Cloud Data Flow 并保留 XML 是最初执行此操作的最快方法。
否则这些作业运行良好,并将作业/步骤执行记录到数据库。
使用 XML 时,taskBatchExecutionListener 似乎没有自动添加到作业中,因此任务/批处理关联没有被注册。
此代码在TaskBatchExecutionListenerBeanPostProcessor 中,这可能是因为在使用 XML 配置时,作业 bean 的类型为 JobParserJobFactoryBean 而不是 AbstractJob。
如果我手动添加监听器,即
<listeners>
<listener ref="taskBatchExecutionListener"/>
</listeners>
在作业 xml 中问题已解决。
我有几个问题:
1) 这是 Spring Cloud Task 中的一个错误 - 即它只是没有正确处理 XML 配置,如果是这样我可以为此提出一个问题。
2) Spring Cloud Dataflow 是否应该更好地处理这个问题?看起来表现不佳的任务可以有效地破坏数据并停止检索包含“好”工作的列表。
【问题讨论】:
标签: spring-cloud-dataflow spring-cloud-task