Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring批处理FlatFileItemReader跨读取的所有项/行填充字段值_Java_Spring_Spring Batch_Batch Processing - Fatal编程技术网

Java Spring批处理FlatFileItemReader跨读取的所有项/行填充字段值

Java Spring批处理FlatFileItemReader跨读取的所有项/行填充字段值,java,spring,spring-batch,batch-processing,Java,Spring,Spring Batch,Batch Processing,我正在使用spring批处理FlatFileItemReader读取平面文件 我有一个requestId字段,我需要为从平面文件读取的所有记录填充一个唯一的值。 当我读文件1时。对于在requestId字段创建的所有项目对象,我想将requestId设置为1。对于file2,我需要将requestId设置为2 我的requestId是由一个单独的类唯一生成的 如何使用spring batch实现这一点?有一些可能的解决方案 使用项目 使用(在这里,对于接口,也可以减少注释的详细使用) 我使用了S

我正在使用spring批处理
FlatFileItemReader
读取平面文件

我有一个
requestId
字段,我需要为从平面文件读取的所有记录填充一个唯一的值。 当我读文件1时。对于在requestId字段创建的所有项目对象,我想将
requestId
设置为1。对于file2,我需要将requestId设置为2

我的requestId是由一个单独的类唯一生成的


如何使用spring batch实现这一点?

有一些可能的解决方案

使用项目

使用(在这里,对于接口,也可以减少注释的详细使用)


我使用了StepListener,它工作得很好。谢谢
public class MyItem implements ResourceAware {

    private Resource resource;

    public String getId() {
        return createIdFromResource(resource);
    }

    private String createIdFromResource(final Resource resource) {
        // create your ID here
        return resource.getFilename();
    }

    @Override
    public void setResource(final Resource resource) {
        this.resource = resource;
    }
}
public class TestListener implements StepExecutionListener, ItemReadListener<String> {
    private StepExecution stepExecution;
    private static final String CURRENT_ID = "currentId";

    @Override
    public void beforeStep(final StepExecution stepExecution) {
        this.stepExecution = stepExecution;
    }

    @Override
    public ExitStatus afterStep(final StepExecution stepExecution) {
        return null;
    }

    @Override
    public void beforeRead() {
    }

    @Override
    public void afterRead(final String item) {
        String currentId = null;
        if (stepExecution.getExecutionContext().containsKey(CURRENT_ID)) {
            currentId = stepExecution.getExecutionContext().getString(CURRENT_ID);
        } else {
            String fileName = stepExecution.getExecutionContext().getString("fileName");
            // ... create ID from FileName
            currentId = fileName + "foo";
            stepExecution.getExecutionContext().put(CURRENT_ID, currentId);
        }
    }

    @Override
    public void onReadError(final Exception ex) {
    }
}
String paramValue = stepExecution.getJobExecution().getJobParameters().getString("paramName");
// extract fileName from paramValue