繁体   English   中英

如何通过REST调用将列表传递给Spring Batch ItemReader

[英]How to pass List to Spring Batch ItemReader via REST call

我正在研究一种将使用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列表仅处理一次

但是这次,我不想通过时间表执行任务,而是希望通过REST调用手动执行任务。

我遇到的问题是将List传递给myIndexItemReader 我的REST调用将基于一些查询字符串生成一个List 我发布的上一个问题是,每次执行该步骤时, 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

我采用了另一种方法,并根据REST标准将信息存储在数据库表中。 然后, ItemReader读取表并在每次运行后将其清除。

您可以将查询作为作业参数传递,但是您必须要小心,因为字符串作业参数的长度是有限的(250)(请参见Metadata schema )。
如果这是一个限制,则可以像这样预编译属性文件:

queries.properties

query1=<query string 1>
query2=<query string 2>
query3=<query string 3>
queryn=<query string n>

作为作业参数,您可以传递:

queriesIdsCount (integer): number of queries (0..n)
queryId0 (string): identifier of query in queries.properties file (ex: query2)
queryId1 (string): (ex. query3)
queryIdn (string): (ex. query1)

依此类推,以便您可以从列表中选择查询。
使用Tasklet或常规的Reader / Process / Writer(作为第一步),您可以处理作业参数并使用REST创建List<>
可以使用有关后期绑定的 spEL look来获得作业参数。

我希望我很清楚,英语不是我的母语。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM