【发布时间】:2013-09-11 01:28:00
【问题描述】:
我正在研究一种将使用 Spring Batch 执行工作的 REST 方法。
我定义了一个简单的工作,
<job id="myIndexJob" xmlns="http://www.springframework.org/schema/batch">
<step id="step1">
<tasklet>
<chunk reader="myIndexItemReader" processor="myIndexItemProcessor" writer="myIndexItemWriter" commit-interval="1" />
</tasklet>
</step>
</job>
这项工作模仿了我之前发布的一个问题,
Spring Batch ItemReader list processed only once
但这一次,我不想按计划执行作业,而是想通过 REST 调用手动执行它。
我遇到的问题是将List 传递给myIndexItemReader。我的 REST 调用将根据一些查询字符串生成一个List。每次执行步骤时,我发布的上一个问题都是通过 XML 中的 spring bean 传递给它的 List。
我想做这样的事情,
@RequestMapping(value="/rest/{regex}", method=RequestMethod.GET)
public void run(@PathVariable String regex) {
List<String> myList = new ArrayList<>();
myList.add("something");
long nanoBits = System.nanoTime() % 1000000L;
if (nanoBits < 0) {
nanoBits *= -1;
}
String dateParam = new Date().toString() + System.currentTimeMillis()
+ "." + nanoBits;
JobParameters param = new JobParametersBuilder()
.addString("date", dateParam)
.toJobParameters();
JobExecution execution = jobLauncher.run(job, param);
}
但我只是不知道如何将myList 传递给myIndexItemReader。
到目前为止,我可以通过创建 RepeatTemplate 并在回调中调用 iterate 来做到这一点,但工作 chunk 似乎更干净。
有人有什么想法或建议吗?谢谢/w
【问题讨论】:
-
能否将查询字符串作为作业参数传递给批处理作业,然后让批处理作业阅读器使用查询来创建列表?
-
求职电话之间的查询是否相同或可能不同?
-
@bellabax 它们可以相同也可以不同,但这种调用可能很少见。
-
@Freg 我没有考虑工作参数。读者容易理解吗?我还没有读过。
标签: java spring rest spring-batch