如何在Spring批处理中使用FlatFileItemReader用于空格分隔的项目(单行多个记录)?

时间:2014-04-12 13:16:38

标签: java spring batch-processing spring-batch

Spring批处理FlatFileItemReader默认支持两种文件格式,Fix length和delimiter分开。 e.g

id name email 
1  name1  name1@abc.com
2  name2  name@abc.com

因此,它会将每一行视为项目,将字段视为项目(域)对象的属性。

我的输入文件只有空格或逗号分隔的ID,因为我只需要id(或者它可以是每个项目的唯一名称,如用户名或电子邮件等),例如

1,2,3,4,5,6
7,8,9, ...... so on

username1, username2, username3, username4 .. so on

如何使用FlatFileItemReader将每个id视为每个项目,即单行上的多个记录?或者还有其他方法来实现这个目标吗?

2 个答案:

答案 0 :(得分:0)

  

您可以使用自定义LineMapper根据您的要求实施逻辑,以将项目与每行分开。

以下示例代码将返回由逗号或空格分隔的ID列表或每行中的两者。

import java.util.ArrayList;
import java.util.List;

import org.springframework.batch.item.file.LineMapper;

public class CustomLineMapper implements LineMapper<List<String>> {

    public List<String> mapLine(String line, int lineNumber) throws Exception {

        List<String> list = new ArrayList<String>();
        for (String s1 : line.split(",")) {
            for (String s2 : s1.trim().split(" ")) {
                list.add(s2.trim());
            }
        }
        return list;
    }

}

答案 1 :(得分:0)

覆盖默认缓冲读卡器也可以解决此问题。因此,在您的自定义阅读器中,如果您还没有读完同一行中的所有对象,则不会进入下一行。