我已经通过REST API将我的应用程序与spring XD集成在一起。 我为每个数据源设置并部署了作业def(我的模块与jdbc相关),然后使用相应的作业def作为模板,使用POST请求中提供的jobParameters启动特定作业,其中包含该作业运行唯一的条件。 p>
然后我希望我的REST客户端能够轮询与作业相关的指标,它只是初始化,但是对于这样的调用需要jobExecutionId并且客户端没有这个值,只有jobName当然不是唯一的。
我原本期望POST对/ jobs / execution使用executionId进行响应,事实上它不会让我质疑我使用xd的方式。
有人可以对此有所了解吗?
答案 0 :(得分:0)
我同意你的意见;这似乎是一种疏忽......
/**
* 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.out,您可以监控它(而不是轮询REST API)。
如果您处于分布式模式,则可以将数据转储到Redis(或类似的)接收器。
但我同意,如果发布会返回id,那会更好。
请打开JIRA Issue。