0

我正在使用 Spring Batch Admin 为我们的系统运行批处理作业。我们必须多次运行这些作业。我正在使用spring批处理管理的其余界面。我使用 Spring RestTemplate 开始了一份新工作。

RestTemplate tpl = new RestTemplate();
tpl.postForLocation(Constants.SPRING_BATCH_ADMIN_URL + "/jobs/myBatchJob;

这适用于启动第一个作业,但在后续作业中,请求不会启动该作业的新实例。在作业配置文件中,我定义了一个 jobParmatersIncrementer

<job id="myBatchJob" xmlns="http://www.springframework.org/schema/batch"
    restartable="true" incrementer="jobParametersIncrementer">
    <bean id="jobParametersIncrementer"
        class="org.springframework.batch.core.launch.support.RunIdIncrementer" />

我尝试将我的 postForLocation 更改为

List<JobInstance> jobInstances = jobExplorer.getJobInstances("myBatchJob", 0, 30);
JobParameters jobParameters = jobInstances.get(0).getJobParameters();
RunIdIncrementer runIdIncrementer = new RunIdIncrementer();
JobParameters jobParameters = runIdIncrementer.getNext(jobParameters); 
RestTemplate tpl = new RestTemplate();
tpl.postForLocation(Constants.SPRING_BATCH_ADMIN_URL + 
    "/jobs/myBatchJob?launch=Launch&{parameters}",
    "runid",
    jobParameters.toString());

通过单击启动按钮,它可以从 Spring Batch 管理页面工作。这是在参数编辑框中

run.id(long)=1

如何从另一个 Web 应用程序中多次运行 Spring Batch Admin 中的作业?

4

1 回答 1

0

您可以在请求正文中传递一个参数jobParameter ,该参数携带您的元组

jobParameters=run.id(long)=123

并将其编码的 url 附加到 post 请求中。这是我的 jquery 解决方案。

$.post('<url>/jobs/myBatchJob', 'jobParameters=' + encodeURIComponent('run.id(long)=123')).done(function() {
   // do something
});
于 2014-10-08T10:12:30.023 回答