1

当我尝试在 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 是 typeJobParserJobFactoryBean而不是AbstractJob.

如果我手动添加监听器,即

<listeners>
   <listener ref="taskBatchExecutionListener"/>
</listeners>

在工作 xml 中,问题已解决。

我有几个问题:

1) 这是 Spring Cloud Task 中的一个错误 - 即它只是没有正确处理 XML 配置,如果是这样,我可以为此提出一个问题。

2) Spring Cloud Dataflow 是否应该更好地处理这个问题?一个表现不佳的任务似乎可以有效地破坏数据并停止检索包含“好”工作的列表。

4

2 回答 2

0

我遇到了同样的问题,在我的情况下,问题是通过将@EnableTask 添加到作业配置中来解决的

于 2017-08-24T10:16:52.680 回答
0

我记得也收到了这个错误,但就我而言,我尝试通过 spring cloud dataflow server API 删除任务执行(参见https://docs.spring.io/spring-cloud-dataflow/docs/current-SNAPSHOT/参考/htmlsingle/#api-guide-resources-task-executions-delete)。

当我注意到它实际上是一个 NO-OP 删除(它什么都不做,并且得到了开发人员的确认https://github.com/spring-cloud/spring-cloud-dataflow/issues/1844)时,我尝试手动删除记录数据库,我错过了一些记录。

有一些 FK 依赖项,我的清理工作并不彻底。一旦我重新开始(创建了一个新的数据库模式和所有),问题就消失了。

于 2018-01-04T01:18:30.707 回答