如何在没有任何映射器的情况下使用 spring 批处理读取完整行
How to read complete line without any mapper with spring batch
我正在学习 spring 批处理,我对 reader、mapper 和 writer 有基本的了解。现在我当前的要求是从文件中读取每一行,压缩数据并写入基于千兆空间的内存网格。
我了解到线映射器是 iteam reader 的强制属性。我没有使用创建的映射器,我需要做的就是读取该行并将其发送给编写器以写入网格。那么我怎样才能跳过线映射器或者我怎样才能读取普通线。目前我已经做了类似的事情,这似乎不是一个理想的解决方案。
public class ShrFileMapper implements FieldSetMapper<SpaceDocument> {
@Override
public SpaceDocument mapFieldSet(FieldSet fieldSet) throws BindException {
String positionId = fieldSet.readString(0);
StringBuffer line = new StringBuffer();
for (String fieldValue : fieldSet.getValues()) {
line.append("\t").append(fieldSet);
}
// logic for compression
SpaceDocument spaceDocument = new SpaceDocument("shr.doc");
spaceDocument.setProperty("id", positionId);
spaceDocument.setProperty("payload", compressedString);
return spaceDocument;
}
}
假设您使用的是 FlatFileItemReader,您需要提供一个资源和一个 LineMapper。由于您不想将输入行转换为不需要 LineTokenizer 的任何其他内容,您只想传递原始输入。有关更多信息,您可以查看官方文档:
http://docs.spring.io/spring-batch/reference/html/readersAndWriters.html#flatFileItemReader
Spring已经提供了这样的功能。
请检查 PassThroughLineMapper https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/mapping/PassThroughLineMapper.java
public class PassThroughLineMapper implements LineMapper<String>{
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
}
这个 class 正是您所需要的!
我正在学习 spring 批处理,我对 reader、mapper 和 writer 有基本的了解。现在我当前的要求是从文件中读取每一行,压缩数据并写入基于千兆空间的内存网格。
我了解到线映射器是 iteam reader 的强制属性。我没有使用创建的映射器,我需要做的就是读取该行并将其发送给编写器以写入网格。那么我怎样才能跳过线映射器或者我怎样才能读取普通线。目前我已经做了类似的事情,这似乎不是一个理想的解决方案。
public class ShrFileMapper implements FieldSetMapper<SpaceDocument> {
@Override
public SpaceDocument mapFieldSet(FieldSet fieldSet) throws BindException {
String positionId = fieldSet.readString(0);
StringBuffer line = new StringBuffer();
for (String fieldValue : fieldSet.getValues()) {
line.append("\t").append(fieldSet);
}
// logic for compression
SpaceDocument spaceDocument = new SpaceDocument("shr.doc");
spaceDocument.setProperty("id", positionId);
spaceDocument.setProperty("payload", compressedString);
return spaceDocument;
}
}
假设您使用的是 FlatFileItemReader,您需要提供一个资源和一个 LineMapper。由于您不想将输入行转换为不需要 LineTokenizer 的任何其他内容,您只想传递原始输入。有关更多信息,您可以查看官方文档:
http://docs.spring.io/spring-batch/reference/html/readersAndWriters.html#flatFileItemReader
Spring已经提供了这样的功能。 请检查 PassThroughLineMapper https://github.com/spring-projects/spring-batch/blob/master/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/mapping/PassThroughLineMapper.java
public class PassThroughLineMapper implements LineMapper<String>{
@Override
public String mapLine(String line, int lineNumber) throws Exception {
return line;
}
}
这个 class 正是您所需要的!