POST 到 /jobs/executions 没有响应执行 ID?

POST to /jobs/executions doesn't respond with an execution Id?

我已经通过 REST API 将我的应用程序与 spring XD 集成。 我为每个数据源设置并部署了作业定义(我的模块与 jdbc 相关),然后使用适当的作业定义作为模板启动特定作业,并在 POST 请求中提供 jobParameters,包含条件该工作独有 运行.

然后我希望我的 REST 客户端能够轮询与作业相关的指标,它刚刚初始化,但是对于这样的调用需要 jobExecutionId 而客户端没有这个值,只有 jobName 是当然不是唯一的。

我本以为 POST 到 /jobs/executions 会用一个 executionId 来响应,但它并没有让我质疑我使用 xd 的方式。

任何人都可以阐明这一点吗?

我同意你的看法;这似乎是一个疏忽...

/**
 * Send the request to launch Job. Job has to be deployed first.
 *
 * @param name the name of the job
 * @param jobParameters the job parameters in JSON string
 */
@RequestMapping(value = "", method = RequestMethod.POST, params = "jobname")
@ResponseStatus(HttpStatus.CREATED)
public void launchJob(@RequestParam("jobname") String name, @RequestParam(required = false) String jobParameters) {
    ...
}

我能看出问题;我们需要以某种方式将作业执行反馈给控制器方法(现在启动请求没有结果)。

有一个解决方法...

使用作业执行分路器将作业执行转储到某个接收器;见 job event tap documentation.

xd:>stream create --name jobex --definition "tap:job:myJob.job > file --name=exec --dir=/tmp" --deploy

这会将 jobExecution 信息写入 /tmp/exec。您可以在其中监视(而不是轮询 REST API)。

如果您处于分布式模式,您可以将数据转储到 Redis(或类似)接收器。

不过我同意,如果launch返回id就更好了

请打开一个JIRA Issue.